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!