首頁 > 後端開發 > C++ > 為什麼當 str_copy = SomeFunction(); 時 SomeFunction().c_str() 回傳垃圾數據str_copy.c_str();工作正常嗎?

為什麼當 str_copy = SomeFunction(); 時 SomeFunction().c_str() 回傳垃圾數據str_copy.c_str();工作正常嗎?

Patricia Arquette
發布: 2024-11-18 22:46:02
原創
971 人瀏覽過

Why Does SomeFunction().c_str() Return Garbage Data While str_copy = SomeFunction(); str_copy.c_str(); Works Correctly?

了解函數傳回的字串的c_str() 函數

當函數SomeFunction() 傳回字串時,可能會出現在函式上呼叫c_str()傳回的字串將成功地將其轉換為const 字元指標。但是,在某些情況下,您可能會遇到意外行為。

如提供的程式碼所示,直接在SomeFunction() 上呼叫c_str() 會導致引用垃圾資料的const 字元指標(charArray),同時指派傳回的值將字串轉換為另一個字串(str),然後對其呼叫c_str() 即可實現預期的行為。

為什麼會發生這種情況:

SomeFunction().c_str()提供一個指向僅存在於函數作用域內的臨時變數(SomeFunction() 內的str 變數)的指標。函數傳回後,變數被銷毀,指標 (charArray) 變成懸空指標。

相反,當您使用 str_copy = SomeFunction() 時,將建立傳回字串的副本。這個新字串存在於函數外部,當你對其呼叫 c_str() 時,它傳回的指標指向有效數據,確保正確的轉換。

以上是為什麼當 str_copy = SomeFunction(); 時 SomeFunction().c_str() 回傳垃圾數據str_copy.c_str();工作正常嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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