Heim > Artikel > Backend-Entwicklung > Hier sind einige Titeloptionen unter Berücksichtigung des Fragenformats: Direkt und klar: * Ist „string::c_str()“ in C 11 immer noch nullterminiert? * Garantiert „string::c_str()“ eine Nullterminierung in C?
Ist String::c_str() in C 11 nicht mehr nullterminiert?
In C 11 ist das Verhalten von string:: c_str() war Gegenstand von Debatten. Einige Quellen deuten darauf hin, dass möglicherweise keine nullterminierte Zeichenfolge mehr erzeugt wird.
Bei näherer Betrachtung wird jedoch klar, dass dies nicht der Fall ist. Die Definition von „operator[]“ in C 11 erfordert, dass Zeichenfolgen intern nullterminierte Puffer verwenden. Dies bedeutet, dass c_str(), das in Bezug auf „operator[]“ definiert ist, auch eine nullterminierte Zeichenfolge zurückgeben muss.
Konkret heißt es in Abschnitt 21.4.5 des C 11-Standards, dass „operator[]“ zurückgeben muss „ein Verweis auf ein Objekt vom Typ T mit dem Wert charT(); der referenzierte Wert darf nicht geändert werden.“ Dies bedeutet, dass die Zeichenfolge am Ende ein Nullzeichen enthalten muss.
Zusätzlich definiert Abschnitt 21.4.7.1/1 c_str() als „Ein Zeiger p, so dass p i == &operator[](i) für jeden i in [0,size()].“ Dies bedeutet, dass c_str() Zugriff auf denselben Puffer wie „operator[]“ bietet, der nullterminiert sein muss.
Daher ist string::c_str() trotz anfänglicher Bedenken immer noch garantiert, dass ein Null-Terminiert wird. abgeschlossener String in C 11.
Das obige ist der detaillierte Inhalt vonHier sind einige Titeloptionen unter Berücksichtigung des Fragenformats: Direkt und klar: * Ist „string::c_str()“ in C 11 immer noch nullterminiert? * Garantiert „string::c_str()“ eine Nullterminierung in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!