程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程解疑 >> 指針-關於c++中c_str函數的一些問題

指針-關於c++中c_str函數的一些問題

編輯:編程解疑
關於c++中c_str函數的一些問題

1.“c_str返回的是臨時指針,不能對其操作”這句話是什麼意思,臨時指針是像傳值一樣的拷貝嗎,存在於臨時棧區的那種
2.一個string被c_str函數作用後會被析構??為什麼我自己運行出來不是這樣子的,下面附圖圖片說明
圖片說明

最佳回答:


  1. c_str()返回的是const char*指針,所以不能用該指針改變其指向的對象。例如你的string對象是1234,你希望修改成2234,那你是不能用string函數的c_str返回值來修改它的。
  2. 不是string對象在調用c_str後會被析構,而是string對象在其作用期結束的時候被析構(無論是否調用c_str)。但如果你用c_str獲得了一個指針,而這個指針的作用期比string對象長,那麼在string被析構後這個指針還存在,而指針指向的位置已經無效了。這就會出問題。大概是這樣: const char* func(){ string s = "1234"; return s.c_str(); } 這個函數是不正確的,因為在func返回的時候,s會被析構。所以你返回的const char*指針,指向了一個無效區域。(注意,這個無效區域可能暫時沒有被新數據覆蓋,所以你在函數返回後立刻訪問這個指針對象,不見得會出錯,但這個區域遲早會被覆蓋的。)
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved