首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C阵列memcmp故障

C阵列memcmp故障
EN

Stack Overflow用户
提问于 2018-04-27 07:01:26
回答 4查看 1.2K关注 0票数 1

我需要为我的UNI编写一个代码,在其中我必须接收一些数据的两个数组(可能是int数组或char数组,甚至浮动数组),并比较这两个数组中指针中的n个字符,也就是说,到目前为止,我还停留在这个*注释中--我需要编写自己的memcmp

代码语言:javascript
复制
int byte_compare(const void *b1,const void *b2,size_t len)
{
    char *q1 = (char *)p1;
    char *q2 = (char *)p2;
    int i;

    for (i=0; i<=len*sizeof(*q1) ;i++)
    {
      if(*q1++ != *q2++)
           return 1;
    }
    return 0;
}   

int main()
{
          char str1[] = "abcheya";
          char str2[] = "gtyheyb";

          printf((byte_compare(str1[3],str2[3],3))?"not equal\n":"equal\n");
          /*the output is equal*/

          int arr1[]={1,2,3,4};
          int arr2[]={1,2,7,59};

          printf((byte_compare(arr1[0],arr2[0],3))?"not equal\n":"equal\n");
          /*the output is also equal although it is not supposed to be*/

          return 0;
}

当我比较字符串时,它工作得很好,但是当我尝试比较int或浮动时,它不能正常工作,请帮助我。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-04-27 07:13:48

编辑:编写自己的memcmp函数

代码语言:javascript
复制
int byte_compare(const void *b1,const void *b2,size_t len)
{
    if (len != 0) {
        register const unsigned char *p1 = b1, *p2 = b2;

        do {
            if (*p1++ != *p2++)
                return (*--p1 - *--p2);
        } while (--len != 0);
    }
    return (0);
}
票数 0
EN

Stack Overflow用户

发布于 2018-04-27 07:19:28

在传递len参数时,应该计算比较字节长度。因此,您可以使用模板。

代码语言:javascript
复制
template<typename T>
int byte_compare(const T *b1, const T *b2, size_t len)
{
    return memcmp(b1, b2, len * sizeof(T));  
}

编辑注意:问题是编辑的,答案没有更多的意义。它使用C++,不适用于C类课程。我仍然是对其使用C++没有限制的答案。

票数 1
EN

Stack Overflow用户

发布于 2018-04-27 07:29:40

您需要传递对象的大小,而不是它们的长度:

代码语言:javascript
复制
int byte_compare(const void *b1, const void *b2, size_t size)
{    
   return memcmp(b1, b2, size);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50057034

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档