Rumah > pembangunan bahagian belakang > C++ > Adakah Selamat Digunakan std::string::c_str() pada Temporary Strings dalam C ?

Adakah Selamat Digunakan std::string::c_str() pada Temporary Strings dalam C ?

Linda Hamilton
Lepaskan: 2024-11-11 11:42:02
asal
406 orang telah melayarinya

Is it Safe to Use std::string::c_str() on Temporary Strings in C  ?

Adakah Selamat Digunakan std::string::c_str() pada Rentetan Sementara?

Dalam C , penggunaan std: :string::c_str() pada rentetan sementara telah menjadi subjek kebimbangan. Pertimbangkan coretan kod berikut:

void consumer(char const* p) { std::printf("%s", p); }

std::string random_string_generator();

consumer(random_string_generator().c_str());
Salin selepas log masuk

Kebimbangan timbul kerana, apabila memanggil std::string::c_str() pada objek std::string sementara, kemusnahan objek rentetan kelihatan akan berlaku.

Objek rentetan dimusnahkan.

  • Dalam coretan kod yang disediakan, objek rentetan sementara dimusnahkan pada akhir ungkapan penuh (iaitu, selepas panggilan kepada pengguna()). Oleh itu, kod itu dianggap selamat, kerana penuding yang diambil melalui std::string::c_str() kekal sah sepanjang panggilan kepada pengguna().
  • Hayat objek sementara telah ditakrifkan dengan jelas sejak C 98 , tidak seperti dalam versi C terdahulu di mana ia berbeza-beza bergantung pada pengkompil. Akibatnya, kod yang dahulunya tidak selamat dalam versi terdahulu kini dianggap selamat dengan pengkompil C moden.

Atas ialah kandungan terperinci Adakah Selamat Digunakan std::string::c_str() pada Temporary Strings dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan