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
473 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!

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