Rumah >pembangunan bahagian belakang >C++ >Adakah `std::string` Menyertakan Penamat Null secara Automatik?
Adakah std::string Secara Eksplisit Mempunyai Penamat Null?
Dalam C dan C , aksara null ' ' digunakan untuk menamatkan rentetan . Walau bagaimanapun, dalam konteks jenis std::string C, jawapannya lebih bernuansa sedikit.
Gelagat Lalai
Secara lalai, std::string objek tidak mengandungi penamat null. Ini kerana std::string mengurus memorinya sendiri dan menjejaki panjang rentetan secara dalaman. Oleh itu, sistem pengendalian tidak mengetahui panjang rentetan dan cuba mengakses memori melebihi penghujung rentetan (termasuk penamat nol) boleh membawa kepada gelagat yang tidak ditentukan.
Menggunakan c_str()
Walau bagaimanapun, jika anda secara khusus meminta perwakilan tatasusunan aksara yang ditamatkan nol bagi std::string menggunakan c_str(), tatasusunan yang dikembalikan akan termasuk penamat nol. Ini kerana c_str() mengembalikan penunjuk kepada tatasusunan sementara yang dicipta oleh std::string.
Menambah Aksara Null Secara Terus
Adalah penting untuk ambil perhatian bahawa anda boleh secara manual memasukkan aksara null ke dalam std::string seperti mana-mana aksara lain. Walau bagaimanapun, ini tidak akan menjejaskan kelakuan rentetan itu sendiri. Std::string masih akan mengurus memorinya dan menjejaki panjangnya secara dalaman, dan mengakses memori melebihi penghujung rentetan (walaupun terdapat aksara nol) boleh menghasilkan hasil yang tidak dapat diramalkan.
Contoh
Kod berikut menunjukkan perkara ini tingkah laku:
string s("hello"); cout << s.size() << ' '; s[1] = '<pre class="brush:php;toolbar:false">5 5'; cout << s.size() << '\n';
Output:
Seperti yang anda lihat, memasukkan aksara nol pada indeks 1 tidak mengubah saiz rentetan seperti yang dilaporkan oleh s.size() , menunjukkan bahawa aksara null tidak dilayan secara khusus oleh std::string itu sendiri.
Atas ialah kandungan terperinci Adakah `std::string` Menyertakan Penamat Null secara Automatik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!