Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Mengembalikan Penunjuk Char Malar dengan Selamat dari std::string?
Kaedah Pemulangan yang Betul untuk Penunjuk Char Malar daripada std::string
Dalam pengaturcaraan, alatan pengesanan ralat seperti Coverity flag potensi isu. Salah satu isu tersebut ialah pengembalian bermasalah penunjuk char berterusan daripada std::string, yang boleh membawa kepada tingkah laku yang tidak ditentukan.
Pertimbangkan kod berikut:
const char * returnCharPtr() { std::string someString; // Some processing! return someString.c_str(); }
Masalah dengan ini pendekatan ialah sebaik sahaja std::string someString dimusnahkan, penunjuk char yang dikembalikan menjadi tidak sah, menunjuk ke memori yang dibebaskan. Isu ini boleh diatasi dengan mengembalikan std::string itu sendiri dan bukannya c_str():
std::string returnString() { std::string someString("something"); return someString; }
Walau bagaimanapun, berhati-hati semasa mengakses penunjuk char daripada std::string yang dikembalikan. Sebagai contoh, perkara berikut tidak betul:
const char *returnedString = returnString().c_str();
Apabila std::string yang dikembalikan dimusnahkan, returnString kekal berjuntai dan cuba mengakses returnString.c_str() akan mengakibatkan tingkah laku yang tidak ditentukan. Sebaliknya, simpan keseluruhan std::string:
std::string returnedString = returnString(); // ... use returnedString.c_str() later ...
Pendekatan ini memastikan penunjuk char kekal sah selagi std::string yang disimpan wujud.
Atas ialah kandungan terperinci Bagaimana untuk Mengembalikan Penunjuk Char Malar dengan Selamat dari std::string?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!