[問題] wget 下載

看板LinuxDev作者 (Truth)時間10年前 (2014/11/10 23:09), 編輯推噓4(4012)
留言16則, 6人參與, 最新討論串1/1
最近在版子上要從server端下載更新檔來更新 int download_file(char *img[][2],int count){ char cmd[128] = {0}; int i; //strcat(cmd,"wget -O /data/update.xml'"); for( i=0;i<count;i++){ strcat(cmd,"wget "); strcat(cmd,"-O /Data/"); strcat(cmd,img[i][0]); strcat(cmd," "); strcat(cmd,"\""); strcat(cmd,url); strcat(cmd,"?"); strcat(cmd,"&img_name="); strcat(cmd,img[i][0]); strcat(cmd,"&token="); strcat(cmd,token_decrypt); strcat(cmd,"\""); system(cmd) memset(cmd,0,sizeof(cmd)); } 但是發現到下載到的檔案跟原本的檔案大小差很多 而且還會出現segmentation fault 不知道這樣的寫法對不對 想說會不會是同步下載的關係 難道不能等一個下載玩 在接下一個嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.135.170.126 ※ 文章網址: http://www.ptt.cc/bbs/LinuxDev/M.1415632147.A.766.html

11/10 23:10, , 1F
你怎麼不用script來做?
11/10 23:10, 1F

11/11 11:36, , 2F
要不要把 cmd printf 出來看一下
11/11 11:36, 2F

11/11 21:03, , 3F
有沒有可能 128 不夠大?
11/11 21:03, 3F

11/12 08:47, , 4F
char *img[][2]有點怪,img ia a array pointers to char[2]
11/12 08:47, 4F

11/12 08:47, , 5F
所以你每個image name最多就兩個char, 扣掉\0, 剩一個char
11/12 08:47, 5F

11/12 08:48, , 6F
請問你的檔名是"a"這類的嗎?
11/12 08:48, 6F

11/12 08:49, , 7F
再來是,請不要用strcat, 那是下流的寫法
11/12 08:49, 7F

11/12 08:55, , 8F
int len=0; //reset buff to head
11/12 08:55, 8F

11/12 08:56, , 9F
len+=snprintf(buff+len,sizeof(buff)-len,format,...);
11/12 08:56, 9F

11/12 08:57, , 10F
建議把snprintf學起來,strcat真的不要再用了。
11/12 08:57, 10F

11/12 08:58, , 11F
嗯, 總結: 請愛用script.
11/12 08:58, 11F

11/12 11:28, , 12F
原po的char *img[][2]部份應該無錯,img[][]是char *
11/12 11:28, 12F

11/12 13:01, , 13F
@dirkc: 你說的對﹐是我誤會成"char img[][2]", 但我還是覺
11/12 13:01, 13F

11/12 13:02, , 14F
得有可能原po誤用了,一般人不會用到這麼復雜的(char*)[][]
11/12 13:02, 14F

11/12 19:33, , 15F
感謝樓上大大的回復 我在試看看 我也覺得strcat 很蠢 所
11/12 19:33, 15F

11/12 19:34, , 16F
所以也有想到用snprintf
11/12 19:34, 16F
文章代碼(AID): #1KODKJTc (LinuxDev)
文章代碼(AID): #1KODKJTc (LinuxDev)