Heim >Backend-Entwicklung >C++ >Ist std::string in C 11 garantiert nullterminiert?

Ist std::string in C 11 garantiert nullterminiert?

Linda Hamilton
Linda HamiltonOriginal
2024-12-07 20:27:13880Durchsuche

Is std::string in C  11 Guaranteed to be Null-Terminated?

Nullterminierung in std::string von C 11

In C werden Zeichenfolgen normalerweise mithilfe der Klasse std::string dargestellt. Vor C 11 gab es Unklarheiten darüber, ob std::string-Objekte immer nullterminiert waren.

C 11-Garantie für zusammenhängende Speicherung

In C 11 wurde die Die Klasse std::string erhielt die Garantie, dass ihr Inhalt zusammenhängend gespeichert wird. Damit wurde eines der Bedenken angesprochen, die Herb Sutter in seinem Artikel aus dem Jahr 2008 geäußert hatte.

Annahme des Nullkündigungsvorschlags

Was die Anforderung einer Nullkündigung und das Kopierverbot betrifft -On-Write-Implementierungen wurden die in Sutters Artikel erwähnten Vorschläge im endgültigen Entwurf von C nicht vollständig übernommen 11.

Sicherheit der Verwendung von &str[0]

Jedoch gemäß [string.accessors] p1, std::basic_string::c_str():

Returns: A pointer p such that p + i == &operator[](i) for each i in [0,size()].

Das bedeutet, dass der von s.c_str() zurückgegebene Zeiger, wobei s ein String ist, der Adresse entspricht des Anfangszeichens in der Zeichenfolge (&s[0]).

Daher ist es in C 11 sicher, &str[0] zu verwenden, um auf das erste Zeichen eines std::string-Objekts zuzugreifen, sofern dies vorausgesetzt wird wird nicht durch äußere Faktoren verändert.

Das obige ist der detaillierte Inhalt vonIst std::string in C 11 garantiert 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