了解c_str() 在傳回值上的行為
呼叫傳回字串的函數時,人們可能會假設呼叫c_str( )對回傳值將產生一個const char* ,它可靠地指向字串的字元。但是,在某些情況下,此操作可能會導致意外行為。
請考慮以下程式碼:
string str = SomeFunction(); const char* strConverted = str.c_str(); // Stores the value correctly. const char* charArray = SomeFunction().c_str(); // Stores garbage value. static string SomeFunction() { string str; // Perform string manipulation. return str; }
出現此問題的原因是c_str() 呼叫SomeFunction().c_str( ) 指的是一個臨時對象,一旦函數返回,該對象就會失效。這會導致 charArray 指向無效的記憶體位置,從而產生垃圾值。
要修正此問題,可以將傳回的字串儲存在新的字串變數中,如第一條語句所示。這會建立一個具有延長生命週期的字串的不同副本,並在此副本上呼叫 c_str() 會產生所需的結果。
總之,雖然 c_str() 可用於轉換函數傳回的字串,但請注意建議與臨時工一起工作時。將傳回值儲存在本機字串變數中可確保 c_str() 傳回的 const char* 指標的有效性。
以上是在函數的返回字串上呼叫'c_str()”總是安全的嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!