Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Adakah C 11 Memerlukan Rentetan Null-Terminated untuk c_str() dan data()?

Adakah C 11 Memerlukan Rentetan Null-Terminated untuk c_str() dan data()?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-27 03:15:02203semak imbas

 Does C  11 Require Null-Terminated Strings for c_str() and data()?

Adakah C 11 Membenarkan Rentetan Tidak Ditamatkan Nol dalam Kaedah c_str()?

Dalam C 11, takrifan c_str( ) untuk kelas basic_string telah berubah. Ia kini ditakrifkan sebagai bersamaan dengan data(), yang seterusnya ditakrifkan untuk mengembalikan penunjuk kepada elemen ke-n rentetan, dengan n adalah antara 0 dan saiz rentetan tolak 1.

Walau bagaimanapun , takrifan kaedah operator[] yang dikemas kini, yang mendasari kedua-dua c_str() dan data(), menjelaskan bahawa rentetan kini mesti menggunakan penimbal yang ditamatkan nol secara dalaman.

Secara khusus, kaedah operator[] memerlukan bahawa nilai yang dikembalikan adalah rujukan kepada objek jenis T dengan nilai carta(), dengan T ialah jenis elemen rentetan dan carta() ialah jenis aksara nol. Selain itu, nilai yang dirujuk ini tidak boleh diubah suai.

Memandangkan c_str() dan data() kedua-duanya diperlukan untuk operasi O(1), pelaksanaan pada dasarnya terpaksa menggunakan penimbal yang ditamatkan nol. Tambahan pula, keperluan nilai pulangan bagi kaedah operator[] juga bermakna bahawa aksara null yang ditamatkan mestilah dalam penimbal yang sama dengan elemen rentetan.

Atas ialah kandungan terperinci Adakah C 11 Memerlukan Rentetan Null-Terminated untuk c_str() dan data()?. 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