„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Ist „string::c_str()“ von C++11 immer noch nullterminiert?

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

Veröffentlicht am 07.11.2024
Durchsuche:218

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 Erzeugt 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

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()

Zusätzliche Hinweise:

  • &operator[](0) kann als Synonym für c_str() verwendet werden.
  • Das abschließende Nullzeichen muss im liegen Gleicher Puffer wie die 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.
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3