[問題] 字串函數回傳問題

看板C_and_CPP作者 (Windows)時間13年前 (2012/09/18 22:53), 編輯推噓4(408)
留言12則, 6人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) Dec C++ 問題(Question): 為什麼回傳回來後print出的字串 會怪怪的。 預期的正確結果(Expected Output): abc 錯誤結果(Wrong Output): 什麼都沒有 = =a 程式碼(Code):(請善用置底文網頁, 記得排版) 網頁版 : http://codepad.org/IXO7jWSE #include "stdio.h" #include "stdlib.h" char *func(){ char str[] = {'a','b','c','\0'}; return str; } int main () { char *aaa; aaa = func(); printf ("%s", aaa); system ("PAUSE"); } 補充說明(Supplement): 如果有觀念上錯誤的問題 麻煩各位大大堤點 給我關鍵字 >"< 有時候印出來 還會出現亂碼= =a 我自己推斷,func裡面的str陣列已經給予字串了 所以這時候return會應該是str這陣列的開頭記憶體位置啊, 所以回傳到 aaa 剛好會存原本字串的位置 印出時候理論上 就會去位置上 將一個個的字元印出,直到遇到'\0'才停 但為什麼不是我的預期呢 = =a 以上 謝謝 >"< -- -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 1.161.9.204

09/18 22:56, , 1F
avoid to return reference to local variable
09/18 22:56, 1F

09/18 22:56, , 2F
置底十三誡中的第5誡,裏面有例子可以看
09/18 22:56, 2F

09/18 22:57, , 3F
kw: lifetime of local variable
09/18 22:57, 3F

09/18 23:03, , 4F
好! 我來看一下!
09/18 23:03, 4F

09/18 23:06, , 5F
喔! 大約了解了! 意思是 func 這個函數執行完後 裡面的變數
09/18 23:06, 5F

09/18 23:06, , 6F
就會失效,而原本的位置裡的值 相對地就會不正確!!!?
09/18 23:06, 6F

09/18 23:06, , 7F
(筆記...
09/18 23:06, 7F

09/19 09:25, , 8F
雖然一樓是對的 但好像也應該印出東西才對.
09/19 09:25, 8F

09/19 09:26, , 9F
只是stack frame 不在那邊了吧 裡面的內容應該還在阿
09/19 09:26, 9F

09/19 09:26, , 10F
不過千萬不能這樣寫 我這樣說只是純粹好奇
09/19 09:26, 10F

09/19 10:12, , 11F
開Debugger看看就知道程式怎麼跑了
09/19 10:12, 11F

09/20 20:54, , 12F
printf ("%s\n", aaa); 加\n試試看
09/20 20:54, 12F
文章代碼(AID): #1GM8hRFR (C_and_CPP)