Heim >Backend-Entwicklung >C++ >Warum gibt SomeFunction().c_str() Mülldaten zurück, während str_copy = SomeFunction(); str_copy.c_str(); Funktioniert richtig?

Warum gibt SomeFunction().c_str() Mülldaten zurück, während str_copy = SomeFunction(); str_copy.c_str(); Funktioniert richtig?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-18 22:46:02931Durchsuche

Why Does SomeFunction().c_str() Return Garbage Data While str_copy = SomeFunction(); str_copy.c_str(); Works Correctly?

Verstehen der Funktion von c_str() für von Funktionen zurückgegebene Zeichenfolgen

Wenn Ihre Funktion SomeFunction() eine Zeichenfolge zurückgibt, kann es so aussehen, als ob der Aufruf von c_str() auf der Die zurückgegebene Zeichenfolge konvertiert sie erfolgreich in einen konstanten Zeichenzeiger. In bestimmten Szenarien kann es jedoch zu unerwartetem Verhalten kommen.

Wie der bereitgestellte Code zeigt, führt der direkte Aufruf von c_str() für SomeFunction() dazu, dass ein konstanter Zeichenzeiger (charArray) auf Mülldaten verweist und gleichzeitig die zurückgegebenen Werte zuweist Wenn Sie die Zeichenfolge in eine andere Zeichenfolge (str) umwandeln und dann c_str() darauf aufrufen, erhalten Sie das beabsichtigte Verhalten.

Warum das? tritt auf:

SomeFunction().c_str() stellt einen Zeiger auf eine temporäre Variable (die str-Variable in SomeFunction()) bereit, die nur innerhalb des Funktionsbereichs existiert. Nachdem die Funktion zurückgegeben wurde, wird diese Variable zerstört und der Zeiger (charArray) wird zu einem baumelnden Zeiger.

Im Gegensatz dazu wird bei Verwendung von str_copy = SomeFunction() eine Kopie der zurückgegebenen Zeichenfolge erstellt. Diese neue Zeichenfolge existiert außerhalb der Funktion, und wenn Sie c_str() darauf aufrufen, zeigt der zurückgegebene Zeiger auf gültige Daten und stellt so die korrekte Konvertierung sicher.

Das obige ist der detaillierte Inhalt vonWarum gibt SomeFunction().c_str() Mülldaten zurück, während str_copy = SomeFunction(); str_copy.c_str(); Funktioniert richtig?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn