Adakah String::c_str() Tidak Lagi Ditamatkan Null dalam C 11?
Dalam C 11, kelakuan rentetan:: c_str() telah menjadi perdebatan. Sesetengah sumber mencadangkan bahawa ia mungkin tidak lagi menghasilkan rentetan yang ditamatkan batal.
Walau bagaimanapun, setelah diteliti dengan lebih teliti, ia menjadi jelas bahawa ini tidak berlaku. Takrif operator[] dalam C 11 memerlukan rentetan untuk menggunakan penimbal yang ditamatkan nol secara dalaman. Ini bermakna c_str(), yang ditakrifkan dari segi operator[], mesti juga mengembalikan rentetan yang ditamatkan nol.
Secara khusus, seksyen 21.4.5 standard C 11 menyatakan bahawa operator[] mesti mengembalikan "rujukan kepada objek jenis T dengan nilai carta(); nilai yang dirujuk tidak boleh diubah suai." Ini menunjukkan bahawa rentetan mesti mengandungi aksara nol pada penghujungnya.
Selain itu, bahagian 21.4.7.1/1 mentakrifkan c_str() sebagai "Penunjuk p supaya p i == &operator[](i) untuk setiap i dalam [0,saiz()]." Ini bermakna c_str() menyediakan akses kepada penimbal yang sama seperti operator[], yang mesti ditamatkan batal.
Oleh itu, walaupun terdapat kebimbangan awal, string::c_str() masih dijamin menghasilkan null- ditamatkan rentetan dalam C 11.
Atas ialah kandungan terperinci Berikut ialah beberapa pilihan tajuk, dengan mengingati format soalan: Langsung dan Jelas: * Adakah `string::c_str()` Masih Ditamatkan Null dalam C 11? * Adakah `string::c_str()` Menjamin Penamatan Batal dalam C. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!