[問題]關於陣列字串回傳主程式的問題

看板C_and_CPP作者 (我的雞巴女友)時間7年前 (2018/06/24 12:55), 編輯推噓4(406)
留言10則, 6人參與, 7年前最新討論串1/3 (看更多)
請問各位我想把一個字串陣列回傳為什麼不能直接把 陣列回傳即可, 一定要用strcpy的方式以及動態記憶體配置?? char * getrandom() { char name[30]="California"; char *r = (char*) malloc(sizeof(char) *30); strncpy(r,name,sizeof(name)); return r; } 以上可以執行但是用下面的方式卻不能執行 char * getrandom() { char name[30]="hunkchen2000"; return name; } -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.250.185.240 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1529816100.A.23E.html

06/24 12:57, 7年前 , 1F
local字串 function離開後就不見了
06/24 12:57, 1F

06/24 12:58, 7年前 , 2F
置底文 新手十三誡 第五條
06/24 12:58, 2F

06/24 13:19, 7年前 , 3F
生命週期
06/24 13:19, 3F

06/24 14:37, 7年前 , 4F
因為char* 是"字串開頭位置" 而不是本體
06/24 14:37, 4F

06/24 14:38, 7年前 , 5F
同樣的問題會發生在普通陣列 如int a[100]
06/24 14:38, 5F

06/24 22:56, 7年前 , 6F
加個static看看
06/24 22:56, 6F

06/25 11:02, 7年前 , 7F
用const char* c="hello";的寫法的話 有機會因為編譯器
06/25 11:02, 7F

06/25 11:03, 7年前 , 8F
會把字串放在data segment所以安全下莊 不過我不確定
06/25 11:03, 8F

06/25 11:03, 7年前 , 9F
spec有沒有指定這個行為
06/25 11:03, 9F

06/25 11:22, 7年前 , 10F
variable的scope和lifetime建議先弄懂後續才有辦法進展
06/25 11:22, 10F
文章代碼(AID): #1RBoGa8- (C_and_CPP)
文章代碼(AID): #1RBoGa8- (C_and_CPP)