看板 C_and_CPP 關於我們 聯絡資訊
附上原始碼http://ideone.com/GhVb5v 這是一本書上的練習題 題目是寫一個函式: char* copyStr(int n,const char *str) 將傳入的str複製n次後回傳 在main()裡面的呼叫敘述是dupStr=copyStr(n,srcStr); 現在有個問題是我這樣寫會編譯錯誤: return makes pointer from integer without a cast 老實我google後還是不懂為什麼這樣會錯? 也不確定我讓函式傳回一個陣列的指標是不是對的? 我的基礎不夠好,能否請各位指點一下? 感謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.248.219.23 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1460223426.A.C5C.html
uranusjr: 根本不對啊, 你這樣如果需要 80 個字元以上不就炸了 04/10 01:56
uranusjr: 在回傳值之前你應該先處理很多其他問題 04/10 01:57
s89227: char *dupStr[80] 這個好怪 04/10 02:06
s89227: 然後這種東西用動態記憶體配置會比較好 04/10 02:07
s89227: 不然就像樓上說的一樣,超過80就爆炸了 04/10 02:07
LPH66: 然後關於你的問題, 你回傳的方式不對 04/10 02:59
LPH66: 不過當你解決 80 個字的問題之後理論上這裡就沒問題了 04/10 02:59
LPH66: 另外, 函式回傳「區域變數的指標」是不對的 04/10 02:59
LPH66: 這部份請參照置底十三誡之五, 那裡也有些關於這問題的提示 04/10 03:00
weiclin: 看這個函式的宣告, 一般就兩個作法 04/10 08:27
weiclin: 一個是在函式內 malloc 然後複製好回傳 04/10 08:28
weiclin: 但要記得把回傳值 free 掉, 不然就 memory leak 了 04/10 08:29
weiclin: 另一個是在函式內有一個 static char buf[BUF_LEN] 04/10 08:30
weiclin: 直接複製到這個 buf 後回傳, 然後拿到的人就不用 free 04/10 08:30
weiclin: 但是就不能這樣用:f(copyStr(1,"abc"),copystr(2,"def") 04/10 08:32
weiclin: 題外話,寫這種互動式的要處理輸入真是苦差事.... 04/10 08:34
weiclin: 稍微玩了一下,僅供參考 http://ideone.com/R5uZx7 04/10 08:35
weiclin: 只改動一點你的函式,所以他還是會炸掉的 04/10 08:42