stringstream, string i char * zamieszanie konwersji
Moje pytanie można sprowadzić do, skąd pochodzi łańcuchstringstream.str().c_str()
żyć w pamięci i dlaczego nie można go przypisać do aconst char*
?
Ten przykład kodu wyjaśni to lepiej niż ja
#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;
}
Założenie, żestringstream.str().c_str()
może być przypisany do aconst char*
doprowadziło do błędu, który zabrał mi trochę czasu na śledzenie.
Aby uzyskać dodatkowe punkty, czy ktoś może wyjaśnić, dlaczego zastąpićcout
oświadczenie z
cout << cstr // Prints correctly
<< ss.str().c_str() // Prints correctly
<< cstr2; // Prints correctly (???)
poprawnie drukuje napisy?
Kompiluję w Visual Studio 2008.