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!