Maison > développement back-end > C++ > Pourquoi SomeFunction().c_str() renvoie-t-il des données inutiles alors que str_copy = SomeFunction(); str_copy.c_str(); Fonctionne correctement ?

Pourquoi SomeFunction().c_str() renvoie-t-il des données inutiles alors que str_copy = SomeFunction(); str_copy.c_str(); Fonctionne correctement ?

Patricia Arquette
Libérer: 2024-11-18 22:46:02
original
962 Les gens l'ont consulté

Why Does SomeFunction().c_str() Return Garbage Data While str_copy = SomeFunction(); str_copy.c_str(); Works Correctly?

Comprendre la fonction de c_str() pour les chaînes renvoyées par les fonctions

Lorsque votre fonction SomeFunction() renvoie une chaîne, il peut sembler que l'appel de c_str() sur le La chaîne renvoyée la convertira avec succès en pointeur de caractère const. Cependant, dans certains scénarios, vous pouvez rencontrer un comportement inattendu.

Comme le montre le code fourni, l'appel de c_str() directement sur SomeFunction() entraîne l'apparition d'un pointeur de caractère const (charArray) référençant des données inutiles, tout en attribuant le résultat renvoyé. chaîne à une autre chaîne (str), puis appeler c_str() dessus vous donne le comportement souhaité.

Pourquoi cela se produit :

SomeFunction().c_str() fournit un pointeur vers une variable temporaire (la variable str à l'intérieur de SomeFunction()) qui existe uniquement dans la portée de la fonction. Après le retour de la fonction, cette variable est détruite et le pointeur (charArray) devient un pointeur suspendu.

En revanche, lorsque vous utilisez str_copy = SomeFunction(), une copie de la chaîne renvoyée est effectuée. Cette nouvelle chaîne existe en dehors de la fonction, et lorsque vous appelez c_str() dessus, le pointeur qu'elle renvoie pointe vers des données valides, garantissant la conversion correcte.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal