Мой вопрос может быть сведен к тому, где строка, возвращаемая из stringstream.str().c_str()
вживую в памяти, и почему она не может быть привязана к const char*
?
Этот пример кода объяснит это лучше, чем я могу
#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;
}
Предположение, что stringstream.str().c_str()
может быть присвоено const char*
, привело к ошибке, которая потребовала времени для отслеживания.
Для бонусных очков, может ли кто-нибудь объяснить, почему замена оператора cout
на
cout << cstr // Prints correctly
<< ss.str().c_str() // Prints correctly
<< cstr2; // Prints correctly (???)
правильно печатает строки?
Я компилирую в Visual Studio 2008.