※ 引述《luse (luse)》之銘言:
: ※ 引述《cole945 (躂躂..)》之銘言:
: : 這個寫法就算在 C/C++ 都是錯的呀 @_@
: : 你的 return type 是 char*, 可是你卻 return char
: : 就算你是要 return testStr 的字串好了 (即 testStr),
: : 可是該字串的內容是配置在 test 的 call stack中, 一但 return 就不該使用
: 這個例子 testStr 會被分配在STack上 可是 字串常數 "Hello World"不會
: return testStr 不是一個很好的寫法 but work well
那是錯誤寫法而且也不 work well
注意他是寫 char testStr[]="Hello World!";
所以他 return testStr; 時,就是回傳放在 stack 上字串的起始位址
而不是字串常數 "Hello World" 在 constant pool 中的位址
離開 function 後再去參考先前 stack 上字串的內容,就會得到未知內容
你說的情況是在宣告 (const) char *testStr="Hello World!"; 的時候
這樣子 testStr 變數實際在 stack 上就只有配置一個 char*
佔用大小為 sizeof char* 而不是一整個字串內容
此時 return testStr; 就是回傳 constant pool 中那個字串的起始位址了
這樣才 ok
所以 cole945 說的沒錯
ps. 這個例子恰好是 C 語言指標與陣列的差異
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.115.53.123
※ 編輯: UNARYvvv 來自: 140.115.53.123 (11/14 19:08)