1.“c_str返回的是臨時指針,不能對其操作”這句話是什麼意思,臨時指針是像傳值一樣的拷貝嗎,存在於臨時棧區的那種
2.一個string被c_str函數作用後會被析構??為什麼我自己運行出來不是這樣子的,下面附圖
c_str()
返回的是const char*
指針,所以不能用該指針改變其指向的對象。例如你的string對象是1234,你希望修改成2234,那你是不能用string函數的c_str
返回值來修改它的。c_str
後會被析構,而是string對象在其作用期結束的時候被析構(無論是否調用c_str
)。但如果你用c_str
獲得了一個指針,而這個指針的作用期比string對象長,那麼在string被析構後這個指針還存在,而指針指向的位置已經無效了。這就會出問題。大概是這樣:
const char* func(){
string s = "1234";
return s.c_str();
}
這個函數是不正確的,因為在func返回的時候,s會被析構。所以你返回的const char*
指針,指向了一個無效區域。(注意,這個無效區域可能暫時沒有被新數據覆蓋,所以你在函數返回後立刻訪問這個指針對象,不見得會出錯,但這個區域遲早會被覆蓋的。)