Kekeliruan Penukaran: memahami gelagat aliran rentetan, rentetan dan char*
Kerisauan berputar di sekitar aliran rentetan, rentetan dan char* penukaran timbul daripada sifat sementara rentetan yang dikembalikan oleh stringstream.str().c_str(). Rentetan sementara ini, yang wujud hanya dalam jangka hayat ungkapan, terdedah kepada pemadaman apabila penyata selesai.
Seperti yang ditunjukkan dalam coretan kod yang disediakan, memberikan rentetan sementara kepada const char* membawa kepada ralat masa jalan, kerana penunjuk merujuk memori yang telah dikeluarkan. Output sampah yang terhasil ialah manifestasi ralat rujukan memori ini.
Untuk mengelakkan isu ini, seseorang boleh sama ada menyalin rentetan sementara ke lokasi yang lebih kekal, seperti objek rentetan lain, sebelum mendapatkan perwakilan rentetan C. Sebagai alternatif, jangka hayat rentetan sementara boleh dilanjutkan dengan mengikatnya pada rujukan const, seperti yang ditunjukkan di bawah:
{ const std::string& tmp = stringstream.str(); const char* cstr = tmp.c_str(); }
Pendekatan ini memastikan rentetan itu kekal boleh diakses sepanjang skop rujukan.
Atas ialah kandungan terperinci Mengapakah memberikan stringstream::str().c_str() kepada const char* mengakibatkan ralat masa jalan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!