2011-12-07 42 views
0

如何在字節大小未知的兩個指針之間做字典對比,假設兩個數組大小相等, 例如實現以下函數返回-1或0或1,基於在comparecement和轉換每個字節的ASCIIlexicographic與未知字節大小進行比較 - in c

compare(const void *p1, const void *p2, int size) 

編輯:我添加了字節比較的尺寸另一種說法,我怎麼能施展每個字節爲char和它們之間的比較?

+0

該陣列具有未知大小?這將如何工作? – thumbmunkeys

+0

不可能沒有數組大小? –

+0

你需要知道要比較多少個數組元素 – thumbmunkeys

回答

2

您可能正在尋找strcmp(3)函數。

更新

如果你的陣列是ASCII字符串的不和可能包含在任何位置的0x00字節沒有實際意義什麼,那麼你需要的長度奧利指出,這樣你就可以使用memcmp(3)功能:

int memcmp(const void *s1, const void *s2, size_t n); 

更新#2

好了,現在我們已經establi捨棄你想要不同的字節,你需要你自己的功能。像這樣(未經測試):

size_t cmp(const unsigned char *c1, const unsigned char *c2, ssize_t n) { 
    ssize_t i; 
    for (i=0; i<n; i++) { 
     if (c1[i] != c2[i]) 
      return i; 
    } 
    -1; 
} 

這將讓你找到任何字節不同的字節值。如果沒有差異,請注意-1退貨。這限制了你比較大小完全在ssize_t之內的對象,該對象比size_t類型小 - 但由於你正在比較其中兩個對象,所以我認爲每個對象最多隻能獲得一半的進程地址空間。

+0

OP沒有提到字符串...... –

+1

沒錯,但他確實提到了「ascii」,這讓我有勇氣發佈答案。 :) – sarnold

+0

公平點!..... –

0

您需要一些方法來了解尺寸。顯式地(例如在數據中使用size參數或字段)或隱式地(例如使用空終止符)。

+0

並帶有大小參數?如何做到這一點? –

+0

@ShlomiKomemi:通過遍歷數組直到一個與另一個不同,或者直到你到達最後。 –