[問題] 可否幫看哪邊出錯 囧

看板C_and_CPP (C/C++)作者 (約翰‧克勞薩二世)時間16年前 (2009/09/27 00:44), 編輯推噓0(003)
留言3則, 2人參與, 最新討論串1/1
else if (argc==4&&!strcmp(argv[1],"-r")) { getpat(argv[2],pat1,pat2); printf("getpat\n");/// while (fgets(tmp,100,fptr)) { char *patfind=strstr(tmp,pat1); for (i=0;&tmp[i]!=patfind;i++) printf("%c",tmp[i]); printf("%s",pat2); for (i+=strlen(pat2)*sizeof(char); i<(int)(strlen(tmp)-strlen(pat1)+strlen(pat2)-1);i++) printf("%c",tmp[i]); } } void getpat(const char argv[],char pat1[],char pat2[]) { int i,j; for (i=0;argv[j]!='/';i++,j++) pat1[i]=argv[i]; pat1[i]='\0'; for (i=0,j++;argv[j]!='\0';i++,j++) pat2[i]=argv[j]; pat2[i]='\0'; } 文字檔的處理 這部分是replacement 我用的方法是 先把pat1 pat2(被取代的文字/取代後的文字)給讀出來 (副程式的作用) 然後用strstr去找到 file中正確字串的指標位置 找到後開始印pat2 然後從tmp[i+sizeof(char)*strlen(pat1)]開始繼續印 一直印到strlen(tmp)-strlen(pat1)+strlen(pat2)-1 結束 I am sad now I am happy now 從tmp[5]開始作取代的動作 印出字串%s 此時i還在5 i+strlen(pat1) = 5+3 = 8 從tmp[8]開始繼續印到結束 然後又回去fgets新的檔案 我發現會錯誤的地方是 最後 I am sad now I am sad very much 用happy取代 會變成 I am happy now I am happy very much ad (似乎是印出pat1的不完全字串) l@? 0xxooxxoxxoxo...(以下全部亂碼) 最後seq printf測試結果 他不會跳出while迴圈 是我的終止條件寫錯了嗎? 我目前自我感覺良好 不覺得有錯 囧 btw問一下 我之前用while(!feof(fptr))當終止條件 會出錯 都會多印一些怪字 比如說*str[2] 存的是hello world 他會多印一次world orz 可以請高手幫幫忙嗎 -- Johannes Krauser II 強暴!強暴!強暴!強暴!強暴!強暴! GO TO D.M.C ◥◣ ◥◣ 強暴!強暴!強暴!強暴!強暴! ▄▂▁▂▃▅▆▅ ▃▄ハ ∵ ∵ ▃▄▃ シ ▋▊▍ φjeans1020 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.117.236.215

09/27 01:00, , 1F
好像有地方寫錯 我整個亂掉了...
09/27 01:00, 1F

09/28 16:41, , 2F
for (i+=strlen(pat1)*sizeof(char);
09/28 16:41, 2F

09/28 16:42, , 3F
tmp array invalid read
09/28 16:42, 3F
文章代碼(AID): #1AlaJTzS (C_and_CPP)
文章代碼(AID): #1AlaJTzS (C_and_CPP)