confusão de stringstream, string e char *
Minha pergunta pode ser resumida, de onde a string retornoustringstream.str().c_str()
viver na memória, e por que não pode ser atribuído a umconst char*
?
Este exemplo de código irá explicar melhor do que eu posso
#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;
}
A suposição de questringstream.str().c_str()
poderia ser atribuído a umconst char*
levou a um bug que demorou um pouco para rastrear.
Para pontos de bônus, alguém pode explicar por que a substituição docout
declaração com
cout << cstr // Prints correctly
<< ss.str().c_str() // Prints correctly
<< cstr2; // Prints correctly (???)
imprime as cordas corretamente?
Estou compilando no Visual Studio 2008.