Heim  >  Artikel  >  Backend-Entwicklung  >  Ist „string::c_str()“ von C 11 immer noch nullterminiert?

Ist „string::c_str()“ von C 11 immer noch nullterminiert?

Susan Sarandon
Susan SarandonOriginal
2024-10-27 00:52:02236Durchsuche

Is C  11's `string::c_str()` Still Null-Terminated?

Entfernt string::c_str() von C 11 die Nullterminierung?

In C 11 ist string::c_str nicht mehr garantiert Erzeuge eine nullterminierte Zeichenfolge.

Grund:

In C 11 ist string::c_str als identisch mit string::data definiert, das wiederum definiert ist als Äquivalent zu *(begin() n) für 0 <= n < Größe(). Der Standard verlangt nicht explizit, dass die Zeichenfolge am Ende ein Nullzeichen enthält.

Folgen:

Dies impliziert, dass string::c_str() möglicherweise nicht mehr zurückgegeben wird eine nullterminierte Zeichenfolge, was zu potenziellen Fehlern in Szenarien führt, die eine solche Beendigung voraussetzen.

Lösung:

Die Lösung besteht darin, string::c_str() nur für zu verwenden Kompatibilität mit Legacy-Code. Verwenden Sie für neuen Code stattdessen string::data(). Während string::data() keine nullterminierte Zeichenfolge zurückgibt, gibt es einen Zeiger auf den zugrunde liegenden Puffer zurück, der intern garantiert nullterminiert ist.

Implementierungsdetails:

Intern sind Strings jetzt erforderlich, um nullterminierte Puffer zu verwenden. Die Operator[]-Definition in Abschnitt 21.4.5 erfordert, dass der Operator für size() <= pos einen Verweis auf ein charT() mit dem Wert „ “ zurückgibt, wodurch nullterminierte Puffer effektiv erzwungen werden.

Zusätzliche Hinweise:

  • &operator[](0) kann als Synonym für c_str() verwendet werden.
  • Das abschließende Nullzeichen muss im selben liegen Puffer als String-Daten, da *(p size()) gleich charT() sein muss. Selbst wenn das Nullzeichen träge initialisiert wird, ist es daher nicht möglich, den Puffer in einem Zwischenzustand zu beobachten.

Das obige ist der detaillierte Inhalt vonIst „string::c_str()“ von C 11 immer noch nullterminiert?. 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