путаница преобразования строк, строк и символов *
Мой вопрос можно свести к тому, откуда возвращается строка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.