由于您的元素可以是任何东西:int8_t、指针、任何类型的双指针;因此,您需要一个特定于存储元素类型的比较函数。
想象一下,您的元素是一个char *
:这两个字符串是相同的,但两个地址是不同的。
您需要在比较函数中提供一个指针函数,以便将其传递给您的函数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);
}
自定义结构体的比较:
bool compare_mystruct(void *p1, void *p2) {
bool ret = true;
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;
}
memcpy
,这很容易触发段错误。但我不知道你传递了什么。请展示你的调用代码。 - AnT stands with Russia