Heim >Backend-Entwicklung >C++ >Ist „c_str()' in C 11 immer noch garantiert, dass es einen nullterminierten String zurückgibt?

Ist „c_str()' in C 11 immer noch garantiert, dass es einen nullterminierten String zurückgibt?

Barbara Streisand
Barbara StreisandOriginal
2024-10-28 09:22:02334Durchsuche

Is `c_str()` in C  11 still guaranteed to return a null-terminated string?

c_str() und Null-terminierte Strings in C 11

In C 11 löst die Definition von basic_string::c_str() a aus Frage: Erzeugt es immer noch eine nullterminierte Zeichenfolge?

Das Problem

In C 11 ist basic_string::c_str so definiert, dass es mit basic_string::data übereinstimmt. was wiederum mit (begin() n) und (&*begin() n) übereinstimmt. Es gibt keine explizite Anforderung für ein Nullzeichen am Ende der Zeichenfolge.

Die Antwort

Trotz der fehlenden expliziten Definition ist dies für Zeichenfolgen in C 11 erforderlich Verwenden Sie intern nullterminierte Puffer. Dies wird in der Definition von „operator[]“ deutlich:

"Returns: *(begin() pos) if pos < size(), andernfalls eine Referenz auf ein Objekt vom Typ T mit dem Wert charT(); Der referenzierte Wert darf nicht geändert werden >

Zusätzliche Überlegungen

Die Rückgabewertanforderung für Operator[] impliziert, dass Sie &operator[](0) verwenden können, um c_str() abzurufen. Das bedeutet, dass sich das abschließende Nullzeichen im selben Puffer befinden muss. Selbst wenn der Terminator träge initialisiert wird, kann er daher nicht in einem Zwischenzustand beobachtet werden.

Schlussfolgerung

Im Gegensatz zu den anfänglichen Annahmen ist c_str() in C 11 Es wird immer noch garantiert, dass eine nullterminierte Zeichenfolge entsteht, was die Kompatibilität mit Legacy-Code gewährleistet und einen effizienten Zeichenzugriff ermöglicht.

Das obige ist der detaillierte Inhalt vonIst „c_str()' in C 11 immer noch garantiert, dass es einen nullterminierten String zurückgibt?. 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