Rumah > pembangunan bahagian belakang > C++ > Adakah `c_str()` dalam C 11 masih dijamin untuk mengembalikan rentetan yang ditamatkan nol?

Adakah `c_str()` dalam C 11 masih dijamin untuk mengembalikan rentetan yang ditamatkan nol?

Barbara Streisand
Lepaskan: 2024-10-28 09:22:02
asal
372 orang telah melayarinya

Is `c_str()` in C  11 still guaranteed to return a null-terminated string?

c_str() dan Null-Terminated Strings dalam C 11

Dalam C 11, takrifan basic_string::c_str() menimbulkan soalan: adakah ia masih menghasilkan rentetan yang ditamatkan nol?

Isunya

Dalam C 11, basic_string::c_str ditakrifkan untuk menjajarkan dengan basic_string::data, yang seterusnya menjajarkan dengan (begin() n) dan (&*begin() n). Tiada keperluan eksplisit untuk aksara nol pada penghujung rentetan.

Jawapannya

Walaupun kekurangan definisi yang jelas, rentetan dalam C 11 diperlukan untuk gunakan penimbal yang ditamatkan nol secara dalaman. Ini jelas dalam takrif operator[]:

"Pulangan: *(mulakan() pos) jika pos < saiz(), jika tidak, rujukan kepada objek jenis T dengan nilai carta(); nilai yang dirujuk tidak boleh diubah suai."

Memandangkan c_str ditakrifkan dari segi operator[] dan kedua-dua c_str dan data mestilah O(1), pelaksanaan terpaksa menggunakan penimbal yang ditamatkan nol.

Pertimbangan Tambahan

Keperluan nilai pulangan untuk operator[] membayangkan bahawa anda boleh menggunakan &operator[](0) untuk mendapatkan c_str(). Ini bermakna aksara null yang ditamatkan mesti berada dalam penimbal yang sama. Akibatnya, walaupun penamat dimulakan dengan malas, ia tidak boleh diperhatikan dalam keadaan pertengahan.

Kesimpulan

Bertentangan dengan andaian awal, c_str() dalam C 11 ialah masih dijamin menghasilkan rentetan yang ditamatkan nol, memastikan keserasian dengan kod lama dan membolehkan akses aksara yang cekap.

Atas ialah kandungan terperinci Adakah `c_str()` dalam C 11 masih dijamin untuk mengembalikan rentetan yang ditamatkan nol?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan