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