Ma question peut être résumée ainsi : où la chaîne de caractères retournée par stringstream.str().c_str()
vivre dans la mémoire, et pourquoi ne peut-elle pas être assignée à une const char*
?
Cet exemple de code l'explique mieux que je ne peux le faire.
#include <string>
#include <sstream>
#include <iostream>
using namespace std;
int main()
{
stringstream ss("this is a string\n");
string str(ss.str());
const char* cstr1 = str.c_str();
const char* cstr2 = ss.str().c_str();
cout << cstr1 // Prints correctly
<< cstr2; // ERROR, prints out garbage
system("PAUSE");
return 0;
}
L'hypothèse selon laquelle stringstream.str().c_str()
pourrait être attribué à un const char*
a conduit à un bug qui m'a pris un certain temps pour le retrouver.
Pour les points bonus, quelqu'un peut-il expliquer pourquoi le remplacement du cout
déclaration avec
cout << cstr // Prints correctly
<< ss.str().c_str() // Prints correctly
<< cstr2; // Prints correctly (???)
imprime les chaînes de caractères correctement ?
Je compile avec Visual Studio 2008.