首頁 > 後端開發 > C++ > 為什麼將 stringstream.str().c_str() 指派給 const char* 會導致垃圾輸出?

為什麼將 stringstream.str().c_str() 指派給 const char* 會導致垃圾輸出?

Barbara Streisand
發布: 2024-11-16 17:16:03
原創
517 人瀏覽過

Why Does Assigning `stringstream.str().c_str()` to a `const char*` Lead to Garbage Output?

stringstream、string 和 char* 轉換混亂

本文解決了將 const char* 分配給 stringstream傳回的字串的問題.str().c_str().

問題說明

stringstream.str() 建構一個臨時字串對象,該物件在表達式末尾被銷毀。當將此臨時字串指派給 const char* 時,指標引用了已刪除的字串,從而導致垃圾輸出。

下面是一個範例:

在上面的程式碼中,表達式之後結束後,由stringstream.str() 建立的臨時字串被刪除,導致cstr 指向無效的記憶體位置。

解決方案

要修正此問題,在將臨時字串轉換為 const char* 之前,應將其複製到另一個字串物件。這可以使用以下方法來實現:

獎勵積分說明

以下修改後的程式碼可以正確列印字串:

此修改之所以有效,是因為:

  • cstr指向從具有已知生命週期的字串物件建立的 const char*。
  • ss.str().c_str() 傳回指向臨時字串的const char*,該字串現在受到stringstream.str()
  • cstr2 指向與ss.str(). c_str() 相同的臨時字串傳回的const 引用的保護,但它不是const,因此可以將其指派給一個臨時char*,該暫存char* 在cout語句末尾被銷毀。

以上是為什麼將 stringstream.str().c_str() 指派給 const char* 會導致垃圾輸出?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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