Verwirrung bei der Konvertierung von stringstream, string und char*
Dieser Artikel befasst sich mit dem Problem der Zuweisung eines const char* zum von stringstream zurückgegebenen String .str().c_str().
Problemerklärung
stringstream.str() erstellt ein temporäres String-Objekt, das am Ende des Ausdrucks zerstört wird. Wenn Sie diese temporäre Zeichenfolge einem const char* zuweisen, verweist der Zeiger auf die gelöschte Zeichenfolge, was zu einer fehlerhaften Ausgabe führt.
Hier ist ein Beispiel:
stringstream ss("this is a string\n"); const char* cstr = ss.str().c_str();
Im obigen Code nach dem Ausdruck endet, wird die von stringstream.str() erstellte temporäre Zeichenfolge gelöscht, was dazu führt, dass cstr auf einen ungültigen Speicherort zeigt.
Lösung
Um dieses Problem zu beheben, muss der Die temporäre Zeichenfolge sollte in ein anderes Zeichenfolgenobjekt kopiert werden, bevor sie in ein const char* konvertiert wird. Dies kann mit dem folgenden Ansatz erreicht werden:
string tmp = stringstream.str(); const char* cstr = tmp.c_str();
Bonuspunkte-Erklärung
Der folgende geänderte Code gibt die Zeichenfolgen korrekt aus:
cout << cstr << ss.str().c_str() << cstr2;
Diese Änderung funktioniert, weil:
Das obige ist der detaillierte Inhalt vonWarum führt die Zuweisung von „stringstream.str().c_str()' zu einem „const char*' zu einer Müllausgabe?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!