Entfernt string::c_str() von C 11 die Nullterminierung?
In C 11 ist string::c_str nicht mehr garantiert Erzeuge eine nullterminierte Zeichenfolge.
Grund:
In C 11 ist string::c_str als identisch mit string::data definiert, das wiederum definiert ist als Äquivalent zu *(begin() n) für 0 <= n < Größe(). Der Standard verlangt nicht explizit, dass die Zeichenfolge am Ende ein Nullzeichen enthält.
Folgen:
Dies impliziert, dass string::c_str() möglicherweise nicht mehr zurückgegeben wird eine nullterminierte Zeichenfolge, was zu potenziellen Fehlern in Szenarien führt, die eine solche Beendigung voraussetzen.
Lösung:
Die Lösung besteht darin, string::c_str() nur für zu verwenden Kompatibilität mit Legacy-Code. Verwenden Sie für neuen Code stattdessen string::data(). Während string::data() keine nullterminierte Zeichenfolge zurückgibt, gibt es einen Zeiger auf den zugrunde liegenden Puffer zurück, der intern garantiert nullterminiert ist.
Implementierungsdetails:
Intern sind Strings jetzt erforderlich, um nullterminierte Puffer zu verwenden. Die Operator[]-Definition in Abschnitt 21.4.5 erfordert, dass der Operator für size() <= pos einen Verweis auf ein charT() mit dem Wert „ “ zurückgibt, wodurch nullterminierte Puffer effektiv erzwungen werden.
Zusätzliche Hinweise:
Das obige ist der detaillierte Inhalt vonIst „string::c_str()' von C 11 immer noch nullterminiert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!