std::string.c_str() 傳回值無效
在C 中,傳回衍生的常數字元指標(char*)使用c_str() 方法的std::string 實例會帶來潛在問題。一旦 std::string 物件被銷毀,這可能會導致指標失效,從而導致未定義的行為。
考慮以下範例:
const char* returnCharPtr() { std::string someString; // Some processing! return someString.c_str(); }
在此程式碼中,std: :string 名為 someString 的物件是在函數內本地建立的。經過一些處理後,透過 c_str() 方法存取其內部字元數組,並傳回指向該數組的指標。
但是,當函數作用域結束時,someString 被銷毀,其分配的記憶體被釋放。結果,c_str() 傳回的指針將成為懸空指針,指向不再有效的記憶體。
解
要避免此問題,有幾種可能的方法:
範例
使用std::string 傳回型別:
std::string returnString() { std::string someString("something"); return someString; }
此函式現在傳回字串的有效副本,消除任何潛在的懸空指針。
以上是為什麼回傳 `std::string.c_str()` 很危險,如何避免未定義的行為?的詳細內容。更多資訊請關注PHP中文網其他相關文章!