[問題] memcmp 比對中文字

看板C_and_CPP作者 (YenYi)時間15年前 (2010/08/03 14:15), 編輯推噓8(8021)
留言29則, 5人參與, 最新討論串1/1
有關於C的memcmp 和 strcmp 其實只是簡單的從檔案中一行一行的讀取 想要刪除掉重複行 讀近來的字串放str1 上一筆字串放str2 memcmp(str1, str2, 12) 怎麼樣都沒辦法判斷出來的字串是相等的 但是我已for迴圈把str1與str2逐一位元相比 for (i=0; i<= 12; i++) k=memcmp(str1+i, str2+i, 1); k都是0 想請問高手,我是卡在哪一關@@" 附上測試程式碼 囧rz while(1) { if(fgets(str1,sizeof(str1),inp_fp)==NULL)break; prono++; if (memcmp(str1, str2, 12)==0) continue; memcpy(str2, str1, sizeof(str1)); printf("%s",str2); } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.168.93.153

08/03 22:33, , 1F
回傳值若是0,表示二個字串相等,所以你的問題是?
08/03 22:33, 1F

08/03 22:35, , 2F
推測問題是, str1/str2兩段mem一個byte一個byte拿出來
08/03 22:35, 2F

08/03 22:36, , 3F
memcmp結果都相等(0), 但是12個一次比就比不出相等這樣?
08/03 22:36, 3F

08/03 22:36, , 4F
第一個memcmp(str1, str2,12)都不會回傳0 ..
08/03 22:36, 4F

08/03 22:36, , 5F
恩,就如同VictorTom所說的那樣
08/03 22:36, 5F

08/03 22:41, , 6F
在memcmp那一行下斷點進去追...
08/03 22:41, 6F

08/03 22:43, , 7F
還有一種可能是你的str1/str2其中一個長度不到12...
08/03 22:43, 7F

08/03 22:45, , 8F
長度都宣告為13
08/03 22:45, 8F

08/03 22:49, , 9F
請問Devc++的step into是不是沒辦法進去追..
08/03 22:49, 9F

08/03 23:21, , 10F
只記得VC的可以, DevC++的不曉得; 另外小弟剛剛模擬寫了
08/03 23:21, 10F

08/03 23:21, , 11F
一個(DevC++), 測資"一二三四五六", 可以正確比出來說;
08/03 23:21, 11F

08/03 23:22, , 12F
您建議提供一下你使用會有錯的測資嗎??
08/03 23:22, 12F

08/03 23:29, , 13F
介意
08/03 23:29, 13F

08/03 23:31, , 14F
typo (光速逃XD) 一瞬間還想l大為什麼介意Orz
08/03 23:31, 14F

08/03 23:34, , 15F
"台北縣板橋市" 正在測試,或許是結束字元\0的問題吧-.-
08/03 23:34, 15F

08/03 23:35, , 16F
應該跟測資無關,我直接將檔案內容改為一二三四五六也
08/03 23:35, 16F

08/03 23:35, , 17F
是一樣,應該是我自己字串的處理有誤,真不好意思
08/03 23:35, 17F

08/03 23:36, , 18F
小弟我兩個測出來都是相等說, 或許您要檢查一下code:)
08/03 23:36, 18F

08/03 23:37, , 19F
慢兩拍....XD
08/03 23:37, 19F
※ 編輯: yenyi0312 來自: 118.168.93.153 (08/03 23:40)

08/03 23:42, , 20F
附上笨拙的程式碼 = ="
08/03 23:42, 20F

08/04 01:28, , 21F
噢...該不會是 fgets 會加進換行字元的問題吧?!
08/04 01:28, 21F

08/04 01:29, , 22F
咦也不對 你是用 memcmp 帶12去比啊...
08/04 01:29, 22F

08/04 01:29, , 23F
啊不對 換行字元可能有問題
08/04 01:29, 23F

08/04 01:30, , 24F
你的 str1 和 str2 是一起宣告且都正好 13 對不對?
08/04 01:30, 24F

08/04 01:30, , 25F
是的話那就是這個換行字元造成 buffer overflow 了
08/04 01:30, 25F

08/04 09:09, , 26F
可是fgets()不是已經有指定buffer的大小了嗎?_?
08/04 09:09, 26F

08/04 09:09, , 27F
而且他說12個分開來一個一個比就會OK呢@_@"
08/04 09:09, 27F

08/04 13:28, , 28F
也是齁 @_@
08/04 13:28, 28F

08/04 13:40, , 29F
迷樣的問題....XD
08/04 13:40, 29F
文章代碼(AID): #1CM2ITgS (C_and_CPP)