[問題] 處理字串的函式問題

看板C_and_CPP作者 (風行草)時間9年前 (2016/04/10 01:37), 編輯推噓2(2016)
留言18則, 4人參與, 最新討論串1/1
附上原始碼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

04/10 01:56, , 1F
根本不對啊, 你這樣如果需要 80 個字元以上不就炸了
04/10 01:56, 1F

04/10 01:57, , 2F
在回傳值之前你應該先處理很多其他問題
04/10 01:57, 2F

04/10 02:06, , 3F
char *dupStr[80] 這個好怪
04/10 02:06, 3F

04/10 02:07, , 4F
然後這種東西用動態記憶體配置會比較好
04/10 02:07, 4F

04/10 02:07, , 5F
不然就像樓上說的一樣,超過80就爆炸了
04/10 02:07, 5F

04/10 02:59, , 6F
然後關於你的問題, 你回傳的方式不對
04/10 02:59, 6F

04/10 02:59, , 7F
不過當你解決 80 個字的問題之後理論上這裡就沒問題了
04/10 02:59, 7F

04/10 02:59, , 8F
另外, 函式回傳「區域變數的指標」是不對的
04/10 02:59, 8F

04/10 03:00, , 9F
這部份請參照置底十三誡之五, 那裡也有些關於這問題的提示
04/10 03:00, 9F

04/10 08:27, , 10F
看這個函式的宣告, 一般就兩個作法
04/10 08:27, 10F

04/10 08:28, , 11F
一個是在函式內 malloc 然後複製好回傳
04/10 08:28, 11F

04/10 08:29, , 12F
但要記得把回傳值 free 掉, 不然就 memory leak 了
04/10 08:29, 12F

04/10 08:30, , 13F
另一個是在函式內有一個 static char buf[BUF_LEN]
04/10 08:30, 13F

04/10 08:30, , 14F
直接複製到這個 buf 後回傳, 然後拿到的人就不用 free
04/10 08:30, 14F

04/10 08:32, , 15F
但是就不能這樣用:f(copyStr(1,"abc"),copystr(2,"def")
04/10 08:32, 15F

04/10 08:34, , 16F
題外話,寫這種互動式的要處理輸入真是苦差事....
04/10 08:34, 16F

04/10 08:35, , 17F
稍微玩了一下,僅供參考 http://ideone.com/R5uZx7
04/10 08:35, 17F

04/10 08:42, , 18F
只改動一點你的函式,所以他還是會炸掉的
04/10 08:42, 18F
文章代碼(AID): #1N2Jt2nS (C_and_CPP)