Rumah >pembangunan bahagian belakang >C++ >Adakah `&s[0]` Penunjuk Selamat dan Bersebelahan kepada Aksara dalam C std::string?

Adakah `&s[0]` Penunjuk Selamat dan Bersebelahan kepada Aksara dalam C std::string?

Patricia Arquette
Patricia Arquetteasal
2024-12-05 15:41:10959semak imbas

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

Bolehkah "&s[0]" Merujuk Aksara Berturut-turut dalam std::string?

Telah diperhatikan bahawa kod seperti ini:

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

akan selamat jika s ialah std::vector, tetapi persoalannya ialah sama ada ia adalah penggunaan selamat std::string.

Dalam C 98/03, peruntukan std::string tidak dijamin bersebelahan. Walau bagaimanapun, C 11 menguatkuasakan hubungan ini. Dalam amalan, kebanyakan pelaksanaan menggunakan storan bersebelahan.

Penggunaan &s[0] dijamin oleh standard C 11 untuk berfungsi, walaupun untuk rentetan panjang sifar. Ini kerana operator[] ditakrifkan sebagai:

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

Selain itu, data() ditakrifkan sebagai:

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

Oleh itu, "&s[0]" menunjuk kepada aksara berturut-turut dalam std::string dan merupakan penggunaan yang selamat.

Atas ialah kandungan terperinci Adakah `&s[0]` Penunjuk Selamat dan Bersebelahan kepada Aksara dalam C std::string?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn