Heim > Artikel > Backend-Entwicklung > Hier sind einige fragenbasierte Titel, die zum Inhalt Ihres Artikels passen: **Direkt und fokussiert:** * **Warum führt der Aufruf von „std::string.c_str()“ für eine temporäre Zeichenfolge zu undefiniertem Verhalten?** * **
Aufruf von std::string.c_str() für einen temporären String
In C wird ein temporäres Objekt am Ende zerstört vollen Ausdruck, in dem es geschaffen wurde. Im angegebenen Code ist die Zeile const char* cStr = getString().c_str(); Erstellt ein temporäres std::string-Objekt aus dem Rückgabewert von getString(). Dieses temporäre Element wird jedoch zerstört, bevor der cStr-Zeiger es verwenden kann.
Um dies zu beheben, können Sie das temporäre Element entweder in einer benannten Variablen speichern oder es an eine konstante L-Wert-Referenz oder R-Wert-Referenz binden. Zum Beispiel:
<code class="cpp">std::string s = getString(); // Extended lifetime const char* cStr1 = s.c_str(); std::cout << cStr1 << std::endl; // Safe const std::string& s2 = getString(); // Const lvalue-reference const char* cStr2 = s2.c_str(); std::cout << cStr2 << std::endl; // Safe</code>
Alternativ können Sie den Zeiger verwenden, bevor das Provisorium zerstört wird:
<code class="cpp">std::cout << getString().c_str() << std::endl; // Temporary used immediately</code>
Das obige ist der detaillierte Inhalt vonHier sind einige fragenbasierte Titel, die zum Inhalt Ihres Artikels passen: **Direkt und fokussiert:** * **Warum führt der Aufruf von „std::string.c_str()“ für eine temporäre Zeichenfolge zu undefiniertem Verhalten?** * **. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!