检查两个数组是否相等-C
如何使用memcmp检查两个数组的相等性检查两个数组是否相等-C,c,arrays,C,Arrays,如何使用memcmp检查两个数组的相等性 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) { retu
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;
inti;
对于(i=0;i
elem_size是每个数组元素在array one中使用的字节数,因为元素可以是任何内容:int8、指针、任何内容的双指针;您需要一个特定于所存储元素类型的比较函数 假设您的元素是一个
字符*
:两个字符串相同,但两个地址不同
您需要在比较函数上指定一个指针函数,指向您的函数array\u是否等于
例如:
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=真;
mystryct*s1=(mystruct*)p1;
mystryct*s2=(mystruct*)p2
若你们关心的只是两个数组对象的二进制相等,那个么你们甚至不需要一个循环
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\u two
突然变为非常量(而数组array\u one
变为常量)。而且将elem\u size
和elem\u count
声明为常量也没有多大意义(除了相当美观的考虑之外).我在尝试此操作时收到一个seg错误,我不知道为什么。@Mike Henke:我不知道为什么。显然,您将无效参数传递给了memcpy
,这很容易触发seg错误。但我不知道您传递的是什么。显示您的呼叫代码。我确实找到了它!很抱歉响应太晚。谢谢您的帮助!!
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;
}