2016-01-28 54 views
0

我該如何去檢查使用memcmp的兩個數組的相等性?檢查兩個數組是否相等 - C

bool array_is_equal(const void *array_one, void *array_two, const size_t elem_size, const size_t elem_count) 

我有這樣的事情:

int i; 
for(i = 0; i < elem_count; i++){ 
    if(memcmp(array_one, array_two, elem_size) == 0) { 
     return true; 
    } 
    i++; 
} 

return false; 

與elem_size爲每個陣列元件中的陣列的一個

回答

4

如果所有你關心的是兩個數組對象的二進制平等,那麼你甚至不需要一個週期

bool array_is_equal(const void *array_one, void *array_two, 
        const size_t elem_size, const size_t elem_count) 
{ 
    return memcmp(array_one, array_two, elem_count * elem_size) == 0; 
} 

目前尚不清楚至於爲什麼陣列array_two突然非const(而數組array_one是const)。並且在宣稱elem_sizeelem_count爲const(除了相當美觀的考慮因素)之外沒有多少意義。

+0

我收到一個seg故障嘗試這個,我不知道爲什麼。 –

+1

@Mike Henke:呃,我不知道爲什麼。顯然你將無效的參數傳遞給'memcpy',這很容易觸發seg錯誤。但我不知道你在傳遞什麼。顯示你的通話代碼。 – AnT

+0

其實我想通了!我很抱歉遲到的迴應。感謝您的幫助!! –

0

使用的字節數。由於你的元件可以是任何東西:一箇中int8_t,指針,任何事物上的雙重指針;您需要一個特定於所存儲元素類型的比較函數。

想象一下你的元素是char *:2個字符串是相同的,但2個地址是不同的。

您需要在比較功能上爲您的功能array_is_equal提供指針功能。

例如:

bool array_is_equal(const void *array_one, void *array_two, const size_t elem_size, const size_t elem_count, bool (*comparison_fn)(void *, void *)); 

字符串比較:

bool compare_string(void *str1, void *str2) { 
    return !!strcmp((char *) str1, (char *)str2); 
} 

自定義結構的比較: 布爾compare_mystruct(無效* P1,無效* P2){ 布爾RET =真正; mystryct * s1 =(mystruct *)p1; mystryct * s2 =(mystruct *)p2;

if(ret) ret = compare_string(p1->str1, p2->str1); 
    if(ret) ret = compare_string(p1->str2, p2->str2); 
    if(ret) ret = compare_int(p1->int1, p2->int1); 

    return ret; 
}