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.