Heim >Backend-Entwicklung >C++ >Ist „&s[0]' ein sicherer und zusammenhängender Zeiger auf Zeichen in einem C-std::string?

Ist „&s[0]' ein sicherer und zusammenhängender Zeiger auf Zeichen in einem C-std::string?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-05 15:41:10960Durchsuche

Is `&s[0]` a Safe and Contiguous Pointer to Characters in a C   std::string?

Kann „&s[0]“ auf aufeinanderfolgende Zeichen in einem std::string verweisen?

Es wurde festgestellt, dass Code wie folgt aussieht:

std::string s;
s.resize( strLength );
memcpy( &s[0], str, strLength );

wäre sicher, wenn s ein std::vector wäre, aber die Frage ist, ob es eine sichere Verwendung von ist std::string.

In C 98/03 ist die Zuordnung eines std::string nicht garantiert zusammenhängend. C 11 erzwingt jedoch diese Kontiguität. In der Praxis verwenden die meisten Implementierungen zusammenhängenden Speicher.

Die Verwendung von &s[0] garantiert durch den C 11-Standard, dass sie auch für Zeichenfolgen der Länge Null funktioniert. Dies liegt daran, dass der Operator[] wie folgt definiert ist:

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

Zusätzlich ist data() wie folgt definiert:

Returns: A pointer p such that p + i == &s[i] for each i in [0,size()].

Daher zeigt „&s[0]“ auf aufeinanderfolgende Zeichen in einem std::string und ist eine sichere Verwendung.

Das obige ist der detaillierte Inhalt vonIst „&s[0]' ein sicherer und zusammenhängender Zeiger auf Zeichen in einem C-std::string?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn