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

作者: descent (「雄辯是銀,沉默是金」)   2018-09-14 21:31:37
※ 引述《KaryuuIssen (一閃)》之銘言:
: 開發平台(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();
這裡產生一個暫時物件叫他 tmp_x 好了,
tmp_x 的生命很短, 是個短命鬼, 當這行結束之後,
這個 tmp_x 就不存在了。
所以你的指標 x 指向一個已經不存在的 tmp_x,
自然是任何事情都有可能發生了。
: const char* y = string("222").c_str();
: cout << x << "\n"; // 222(第一行不註解的話會是111)
: cout << y << "\n"; // 222
: }
: 上面程式碼x和y的輸出都是222
: 是因為等號右邊都是string物件的rvalue 所以第二個就直接覆蓋掉第一個嗎?
: 但如果按照這樣解釋 為什麼前面隨便加個其他的string(第一行不註解的話)
: x的輸出結果就變正常的111了?
: 目前搜了一下沒找到答案
: 感謝解答
作者: cutekid (可愛小孩子)   2018-09-15 00:31:00
推(Y)

Links booklink

Contact Us: admin [ a t ] ucptt.com