Maison > Article > développement back-end > Pourquoi l'attribution de `stringstream.str().c_str()` à un `const char*` conduit-elle à une sortie de déchets ?
Confusion de conversion stringstream, string et char*
Cet article aborde le problème de l'attribution d'un const char* à la chaîne renvoyée par stringstream .str().c_str().
Problème Explication
stringstream.str() construit un objet chaîne temporaire qui est détruit à la fin de l'expression. Lors de l'attribution de cette chaîne temporaire à un const char*, le pointeur fait référence à la chaîne supprimée, ce qui entraîne une sortie inutile.
Voici un exemple :
stringstream ss("this is a string\n"); const char* cstr = ss.str().c_str();
Dans le code ci-dessus, après l'expression se termine, la chaîne temporaire créée par stringstream.str() est supprimée, ce qui fait que cstr pointe vers une mémoire invalide location.
Solution
Pour résoudre ce problème, la chaîne temporaire doit être copiée dans un autre objet chaîne avant de la convertir en un caractère const*. Ceci peut être réalisé en utilisant l'approche suivante :
string tmp = stringstream.str(); const char* cstr = tmp.c_str();
Explication des points bonus
Le code modifié suivant imprime correctement les chaînes :
cout << cstr << ss.str().c_str() << cstr2;
Cette modification fonctionne car :
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!