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

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

Patricia Arquette
Patricia Arquette原創
2024-11-16 04:46:06810瀏覽

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn