首頁 > 後端開發 > C++ > 為什麼將 stringstream::str().c_str() 指派給 const char* 會導致執行階段錯誤?

為什麼將 stringstream::str().c_str() 指派給 const char* 會導致執行階段錯誤?

Patricia Arquette
發布: 2024-11-16 04:46:06
原創
894 人瀏覽過

Why does assigning stringstream::str().c_str() to a const char* result in a runtime error?

轉換困惑:理解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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板