作者KaryuuIssen (一閃)
看板C_and_CPP
標題[問題] string和c_str()的奇怪輸出
時間Fri Sep 14 15:30:03 2018
開發平台(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
→ bluesoul: string是temporary object 09/14 15:35
→ notBeing: temporary object 在生命週期之後,其內容值是什麼都可 09/14 15:36
→ notBeing: 以阿 09/14 15:36
→ KaryuuIssen: soga 就看編譯器怎麼搞都行是吧 09/14 15:49
推 nicknick0630: 你的x和y之後都會指向一塊被回收的記憶體 09/14 16:15
→ KaryuuIssen: 恩 想想其實就是dangling pointer 值不可預期 09/14 16:31
噓 eye5002003: 可以理解之前為何有人希望C++把裸指標封掉了,就是有人 09/14 17:33
→ eye5002003: 會亂用,這根本不是C++的錯 09/14 17:36
推 ggBird: 有必要噓嗎? 09/14 19:28
→ eye5002003: 噓只是代表個人不喜歡而已,很嚴重嗎? 09/14 20:29
推 school4303: 很多人對推噓很在乎 09/15 06:16
→ school4303: 雖然我覺得根本沒差XD 09/15 06:16