Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检查两个数组是否相等-C_C_Arrays - Fatal编程技术网

检查两个数组是否相等-C

检查两个数组是否相等-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

如何使用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) {
        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;
}