C++ stringstream, string, and char* conversion confusion
- by Graphics Noob
My question can be boiled down to, where does the string returned from stringstream.str().c_str() live in memory, and why can't it be assigned to a const char*?
This code example will explain it better than I can
#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;
}
The assumption that stringstream.str().c_str() could be assigned to a const char* led to a bug that took me a while to track down.
For bonus points, can anyone explain why replacing the cout statement with
cout << cstr            // Prints correctly
    << ss.str().c_str() // Prints correctly
    << cstr2;           // Prints correctly (???)
prints the strings correctly?
I'm compiling in Visual Studio 2008.