轉換困惑:理解stringstream、string 和char 的行為*
圍繞stringstream、string 和char* 轉換的困境由stringstream.str ().c_str() 傳回的字串的瞬態性質所引起。這個臨時字串只存在於表達式的生命週期內,很容易在語句完成時就被刪除。
如提供的程式碼片段所示,將臨時字串指派給 const char* 會導致執行時間錯誤,因為指標引用已釋放的記憶體。產生的垃圾輸出是此記憶體引用錯誤的表現。
為了防止此問題,可以在取得 C 字串表示之前將臨時字串複製到更永久的位置,例如另一個字串物件。或者,可以透過將臨時字串綁定到 const 引用來延長其生命週期,如下所示:
{ const std::string& tmp = stringstream.str(); const char* cstr = tmp.c_str(); }
此方法可確保字串在整個引用範圍內保持可存取。
以上是為什麼將 stringstream::str().c_str() 指派給 const char* 會導致執行階段錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!