[問題] 2D array的strcmp

看板C_and_CPP (C/C++)作者 (ha)時間13年前 (2012/11/19 07:56), 編輯推噓0(0014)
留言14則, 4人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) dev c++ 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 請從122行開始看,宣告了一個char** value,希望一次可以比較一串字,把value比完 但在strcmp(ha, &value[i])(是不是應該用strcmp(ha, value[i])?但我這樣用,會 有segmentation fault,用了&其實complie時有出現warning說型別不對。前面所有的 scanf和md5也是因此而加上&,跑出的結果卻是所要的)時用debug看到的value[i]不是 自己希望的。 主要的問題就是strcmp(ha, &value[i])的使用,爬文好像有人有類似的問題,但我用 了malloc,感覺無法用一樣的辦法解決。另外printf("%s\n", &value[4]),不知為何 會印出一大堆,但我只有存32個字。 餵入的資料(Input): 一個hash過的字和一本字典整個把他hash掉。 預期的正確結果(Expected Output): 會在 while(i < length &&strcmp(ha, &value[i])!=0)裡面比到一樣的字串而停下來, 然後print出是什麼字。 錯誤結果(Wrong Output): 程式碼(Code):(請善用置底文網頁, 記得排版) http://codepad.org/7wSl8kVT 補充說明(Supplement): -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 1.171.0.153 ※ 編輯: wk4xu4j 來自: 1.171.0.153 (11/19 07:59)

11/19 09:00, , 1F
fscanf 的時候用 value[i] 但是你要先配記憶體給它
11/19 09:00, 1F

11/19 09:19, , 2F
有用malloc了不就是配記憶體給他嗎@@?
11/19 09:19, 2F
好像明白了,一開始是配給value,但value[i]卻還沒有指到地方,這個意思?

11/19 14:21, , 3F

11/19 14:23, , 4F
兩種做法。
11/19 14:23, 4F

11/19 14:24, , 5F
第二種做法因為一開始配置的空間裡,每個元素是字串的指標
11/19 14:24, 5F

11/19 14:25, , 6F
所以必須讓指標只向有效的字串位址,因此每個字串要配置
11/19 14:25, 6F

11/19 14:26, , 7F
一塊空間去讓 value[i] 指。
11/19 14:26, 7F

11/19 14:27, , 8F
第一種做法則是每個元素是一個最長 32 的字串。
11/19 14:27, 8F
謝謝,用程式碼就變得很具體了,兩種的差別。所以第一種作法最後會傳回一個指標,指 向count的String32(count*33的char)而第二種則是指向指標陣列,那些小指標再指向 char [33],第一種在記憶體是一大塊,而第二種在記憶體則是好幾個一條一條的空間

11/19 15:52, , 9F
i 有超過length嗎?
11/19 15:52, 9F

11/19 15:54, , 10F
value[i]每次跳char*大小(4 bytes) 但是value陣列的元素大小
11/19 15:54, 10F

11/19 15:55, , 11F
從code看起來是32個char的大小(32 bytes), 這樣compare會成
11/19 15:55, 11F

11/19 15:56, , 12F
功嗎?? 因為您的記憶體生成方式怪怪的 所以..XD 不知道這是
11/19 15:56, 12F

11/19 15:56, , 13F
不是原因....
11/19 15:56, 13F

11/19 15:57, , 14F
原po可以比較一下跟L大記憶體生成方式的差別.....
11/19 15:57, 14F
比了後也覺得我的寫法很怪XD,小指標的指標直接指到小指標要指的東西,這樣看起來, malloc用法中的兩個型別後面的*只能差1,大於1或0都不太對勁。 compare會失敗喔,debug看起來,好像是不知道什麼的位置。但很奇怪的是之前fscanf 和fprintf那樣硬做可以,到strcmp時卻出問題。 感謝各位這麼有耐心的看我的code,而且一看就看出問題所在,謝謝。 ※ 編輯: wk4xu4j 來自: 1.171.13.79 (11/19 20:33)
文章代碼(AID): #1GgNMiud (C_and_CPP)
文章代碼(AID): #1GgNMiud (C_and_CPP)