看板 C_Sharp 關於我們 聯絡資訊
※ 引述《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)