Heim > Backend-Entwicklung > C++ > Hauptteil

Garantiert „string::c_str()' von C 11 immer noch einen nullterminierten String?

Mary-Kate Olsen
Freigeben: 2024-10-27 15:35:02
Original
343 Leute haben es durchsucht

 Does C  11's `string::c_str()` Still Guarantee a Null-Terminated String?

Ist die Funktion string::c_str() von C 11 nicht mehr nullterminiert?

In C stellt die Klasse basic_string verschiedene Methoden zur Verfügung auf seine Charaktere zugreifen. Eine dieser Methoden, c_str(), sorgt seit C 11 für Verwirrung. Vor C 11 war c_str() für die Rückgabe eines nullterminierten Zeichenarrays verantwortlich, das den Inhalt der Zeichenfolge darstellt.

Allerdings in C 11 hat sich die Definition von basic_string::c_str() geändert. Es ist jetzt als dasselbe definiert wie basic_string::data, das wiederum einen Zeiger auf den Anfang des internen Zeichenpuffers der Zeichenfolge zurückgibt. Dies warf eine Frage auf: Bedeutet diese Änderung, dass c_str() keinen nullterminierten String mehr garantiert?

Die Antwort: Strings erfordern intern nullterminierte Puffer

Die Antwort auf diese Frage lautet nein. Trotz der Änderungen in C 11 müssen Zeichenfolgen weiterhin intern nullterminierte Puffer verwenden. Dies geht aus der Definition der Methode „operator[]“ (21.4.5) im C-Standard hervor:

Requires: pos <= size().
Returns: *(begin()+pos) if pos < size(), otherwise a reference to an object of type T with value charT(); the referenced value shall not be modified.
Nach dem Login kopieren

c_str() wird in Bezug auf „operator[]:

Returns: A pointer p such that p + i == &operator[](i) for each i in [0,size()].
Nach dem Login kopieren
Da c_str() und data beide O(1)-Operationen sein müssen, ist die Implementierung effektiv gezwungen, nullterminierte Puffer zu verwenden. Darüber hinaus stellt die Rückgabewertanforderung für „operator[] sicher, dass c_str() einen Zeiger auf einen nullterminierten Puffer zurückgibt. Daher stellt c_str() trotz der Änderungen in C 11 weiterhin eine nullterminierte Zeichenfolge bereit.

Das obige ist der detaillierte Inhalt vonGarantiert „string::c_str()' von C 11 immer noch einen nullterminierten String?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!