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.
c_str() wird in Bezug auf „operator[]:
Returns: A pointer p such that p + i == &operator[](i) for each i in [0,size()].
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!