[問題] string和c_str()的奇怪輸出

看板C_and_CPP (C/C++)作者 (一閃)時間7年前 (2018/09/14 15:30), 編輯推噓2(318)
留言12則, 7人參與, 7年前最新討論串1/3 (看更多)
開發平台(Platform): (Ex: Win10, Linux, ...) Linux 編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出) GCC 5.4 問題(Question): 昨天碰到的奇妙問題: #include<iostream> #include<string> using namespace std; int main() { //string str("aaa"); const char* x = string("111").c_str(); const char* y = string("222").c_str(); cout << x << "\n"; // 222(第一行不註解的話會是111) cout << y << "\n"; // 222 } 上面程式碼x和y的輸出都是222 是因為等號右邊都是string物件的rvalue 所以第二個就直接覆蓋掉第一個嗎? 但如果按照這樣解釋 為什麼前面隨便加個其他的string(第一行不註解的話) x的輸出結果就變正常的111了? 目前搜了一下沒找到答案 感謝解答 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.112.30.51 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1536910208.A.2E4.html

09/14 15:35, 7年前 , 1F
string是temporary object
09/14 15:35, 1F

09/14 15:36, 7年前 , 2F
temporary object 在生命週期之後,其內容值是什麼都可
09/14 15:36, 2F

09/14 15:36, 7年前 , 3F
以阿
09/14 15:36, 3F

09/14 15:49, 7年前 , 4F
soga 就看編譯器怎麼搞都行是吧
09/14 15:49, 4F

09/14 16:15, 7年前 , 5F
你的x和y之後都會指向一塊被回收的記憶體
09/14 16:15, 5F

09/14 16:31, 7年前 , 6F
恩 想想其實就是dangling pointer 值不可預期
09/14 16:31, 6F

09/14 17:33, 7年前 , 7F
可以理解之前為何有人希望C++把裸指標封掉了,就是有人
09/14 17:33, 7F

09/14 17:36, 7年前 , 8F
會亂用,這根本不是C++的錯
09/14 17:36, 8F

09/14 19:28, 7年前 , 9F
有必要噓嗎?
09/14 19:28, 9F

09/14 20:29, 7年前 , 10F
噓只是代表個人不喜歡而已,很嚴重嗎?
09/14 20:29, 10F

09/15 06:16, 7年前 , 11F
很多人對推噓很在乎
09/15 06:16, 11F

09/15 06:16, 7年前 , 12F
雖然我覺得根本沒差XD
09/15 06:16, 12F
文章代碼(AID): #1RcsE0Ba (C_and_CPP)
文章代碼(AID): #1RcsE0Ba (C_and_CPP)