Rumah >pembangunan bahagian belakang >C++ >Adakah Menggunakan `std::string::c_str()` dengan Temporary String Safe dalam C ?
Memelihara Integriti Rentetan Sementara: Meneroka std::string::c_str()
Di alam C , keselamatan dan kesahihan kod yang melibatkan rentetan sementara sering menimbulkan kebimbangan. Satu soalan sedemikian mengelilingi penggunaan std::string::c_str() dalam konteks rentetan sementara.
Soalan:
Pertimbangkan coretan kod berikut:
void consumer(char const* p) { std::printf("'%s'", p); } std::string random_string_generator(); consumer(random_string_generator().c_str());
Dilema berpunca daripada kemungkinan kemusnahan objek std::string sementara selepas mendapatkan semula penunjuk c_str()nya. Adakah ini menimbulkan kebimbangan kesahihan mengikut piawaian C?
Jawapannya:
Memahami jangka hayat sementara adalah penting. Dalam C , sementara dimusnahkan pada akhir ungkapan penuh, bukan sejurus selepas penciptaannya atau sebelum penggunaannya. Oleh itu, dalam kod yang diberikan, objek std::string sementara akan kekal sehingga kesimpulan panggilan fungsi kepada pengguna().
Penunjuk yang diperoleh melalui std::string::c_str() kekal sah sehingga sebarang operasi bukan const dilakukan pada objek rentetan atau ia dimusnahkan. Memandangkan objek rentetan bersifat sementara dan dimusnahkan pada penghujung ungkapan penuh, kod itu sememangnya terbentuk dengan baik dan sah.
Nota Kaki Sejarah:
Adalah penting untuk ambil perhatian bahawa tingkah laku yang diterangkan di atas menjadi piawai dengan C 98. Sebelum itu, jangka hayat sementara berbeza-beza berdasarkan pelaksanaan pengkompil. Walau bagaimanapun, apabila piawaian semakin matang, gelagat ditakrifkan secara seragam, memastikan ketekalan merentas penyusun.
Atas ialah kandungan terperinci Adakah Menggunakan `std::string::c_str()` dengan Temporary String Safe dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!