Verwirrung bei der Konvertierung von Strings, Strings und Char *

Meine Frage lässt sich dahin bringen, woher die Zeichenfolge stammtstringstream.str().c_str() lebe im Gedächtnis, und warum kann es einem nicht zugewiesen werden?const char*?

Dieses Codebeispiel wird es besser erklären als ich kann

#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;
}

Die Annahme, dassstringstream.str().c_str() könnte einerconst char* führte zu einem Fehler, der eine Weile dauerte, um aufzuspüren.

Kann jemand für Bonuspunkte erklären, warum der ersetzt wird?cout Aussage mit

cout << cstr            // Prints correctly
    << ss.str().c_str() // Prints correctly
    << cstr2;           // Prints correctly (???)

druckt die Saiten richtig aus?

Ich kompiliere in Visual Studio 2008.

Antworten auf die Frage(5)

Ihre Antwort auf die Frage