Maison >développement back-end >C++ >Pourquoi le retour de `std::string.c_str()` est-il dangereux et comment puis-je éviter un comportement non défini ?
Invalidation de std::string.c_str() Valeur de retour
En C , renvoyant un pointeur de caractère constant (char*) dérivé de une instance de std::string utilisant la méthode c_str() pose un problème potentiel. Cela peut conduire à un comportement indéfini en raison de l'invalidation du pointeur une fois l'objet std::string détruit.
Considérez l'exemple suivant :
Dans ce code, un std : :string objet nommé someString est créé localement dans la fonction. Après quelques traitements, son tableau de caractères interne est accessible via la méthode c_str() et un pointeur vers ce tableau est renvoyé.
Cependant, lorsque la portée de la fonction se termine, someString est détruit et sa mémoire allouée est libérée. En conséquence, le pointeur renvoyé par c_str() deviendra un pointeur suspendu, pointant vers une mémoire qui n'est plus valide.
Résolution
Pour éviter ce problème, il existe plusieurs approches possibles :
Exemple
Utilisation du type de retour std::string :
Cette fonction renvoie désormais une copie valide de la chaîne, évitant ainsi tout pointeur potentiel pendant.
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!