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!