Maison > développement back-end > C++ > le corps du texte

L'appel de « c_str() » sur la chaîne renvoyée par une fonction est-il toujours sûr ?

Susan Sarandon
Libérer: 2024-11-23 05:01:10
original
380 Les gens l'ont consulté

Is Calling `c_str()` on a Function's Returned String Always Safe?

Comprendre le comportement de c_str() sur les valeurs de retour

Lors de l'appel d'une fonction qui renvoie une chaîne, on peut supposer que l'appel de c_str( ) sur la valeur renvoyée produirait un const char* qui pointe de manière fiable vers les caractères de la chaîne. Cependant, dans certains scénarios, cette opération peut entraîner un comportement inattendu.

Considérez le code suivant :

string str = SomeFunction();
const char* strConverted = str.c_str(); // Stores the value correctly.
const char* charArray = SomeFunction().c_str(); // Stores garbage value.

static string SomeFunction() {
  string str;
  // Perform string manipulation.
  return str;
}
Copier après la connexion

Le problème se pose car l'appel c_str() sur SomeFunction().c_str( ) fait référence à un objet temporaire, qui devient invalide une fois la fonction renvoyée. Cela entraîne charArray pointant vers un emplacement mémoire non valide, d'où les valeurs inutiles.

Pour remédier à cela, on peut stocker la chaîne renvoyée dans une nouvelle variable de chaîne, comme démontré dans la première instruction. Cela crée une copie distincte de la chaîne avec une durée de vie prolongée, et l'appel de c_str() sur cette copie donne le résultat souhaité.

En résumé, bien que c_str() puisse être utilisé pour convertir des chaînes renvoyées par des fonctions, attention est conseillé lorsque vous travaillez avec des temporaires. Le stockage de la valeur renvoyée dans une variable chaîne locale garantit la validité du pointeur const char* renvoyé par c_str().

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