從std::string.c_str() 傳回非懸空字元指標
在C 中,從std 傳回常數char 指標指標問題,::string::c_str() 有潛在的缺陷。理解這個問題對於確保正確可靠的程式設計至關重要。
考慮程式碼片段:
const char *returnCharPtr() { std::string someString; // Some processing return someString.c_str(); }
根據Coverity 報告,回傳someString.c_str() 會出現一個問題:someString 的生命週期在下列情況結束:函數退出,傳回的char 指標懸空,可能導致未定義的行為。
要解決此問題,可以傳回一個物件,而不是指向物件記憶體的指標。正確的程式碼是:
std::string returnString() { std::string someString("something"); return someString; }
但是,在呼叫returnString() 時,重要的是要避免執行以下操作:
const char *returnedString = returnString().c_str();
這仍然會建立一個懸空指針,因為returnedString 引用returnString 的物件被破壞後不再有效的記憶體。相反,儲存整個std::string 物件:
std::string returnedString = returnString();
透過遵循這些做法,您可以確保您的程式碼正確處理std::string::c_str() 並避免懸空指標問題,從而防止未定義的行為和維護程序完整性。
以上是如何從 C std::string 安全地返回字元指標?的詳細內容。更多資訊請關注PHP中文網其他相關文章!