путаница преобразования строк, строк и символов *

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

Ответы на вопрос(5)

Ваш ответ на вопрос