Heim >Backend-Entwicklung >C++ >Ist „c_str()' in C 11 immer noch garantiert, dass es einen nullterminierten String zurückgibt?
c_str() und Null-terminierte Strings in C 11
In C 11 löst die Definition von basic_string::c_str() a aus Frage: Erzeugt es immer noch eine nullterminierte Zeichenfolge?
Das Problem
In C 11 ist basic_string::c_str so definiert, dass es mit basic_string::data übereinstimmt. was wiederum mit (begin() n) und (&*begin() n) übereinstimmt. Es gibt keine explizite Anforderung für ein Nullzeichen am Ende der Zeichenfolge.
Die Antwort
Trotz der fehlenden expliziten Definition ist dies für Zeichenfolgen in C 11 erforderlich Verwenden Sie intern nullterminierte Puffer. Dies wird in der Definition von „operator[]“ deutlich:
"Returns: *(begin() pos) if pos < size(), andernfalls eine Referenz auf ein Objekt vom Typ T mit dem Wert charT(); Der referenzierte Wert darf nicht geändert werden >
Zusätzliche Überlegungen
Die Rückgabewertanforderung für Operator[] impliziert, dass Sie &operator[](0) verwenden können, um c_str() abzurufen. Das bedeutet, dass sich das abschließende Nullzeichen im selben Puffer befinden muss. Selbst wenn der Terminator träge initialisiert wird, kann er daher nicht in einem Zwischenzustand beobachtet werden.
Schlussfolgerung
Im Gegensatz zu den anfänglichen Annahmen ist c_str() in C 11 Es wird immer noch garantiert, dass eine nullterminierte Zeichenfolge entsteht, was die Kompatibilität mit Legacy-Code gewährleistet und einen effizienten Zeichenzugriff ermöglicht.
Das obige ist der detaillierte Inhalt vonIst „c_str()' in C 11 immer noch garantiert, dass es einen nullterminierten String zurückgibt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!