繁体   English   中英

我不知道如何在 c++ 中使用 memcmp

[英]I don't know how to use memcmp in c++

我想知道当我执行这个程序时为什么会出现这个结果

int arr[4][4] = { 0,0,1,1,
                  1,1,1,1,
                  0,1,1,0,      
                  1,1,1,1 
                } ;

int arr2[2][2] = {1};

cout << memcmp(arr, arr2, 4) << endl ;
cout << memcmp(arr+1, arr2, 4) << endl ;
cout << memcmp(arr+2, arr2, 4) << endl ;
cout << memcmp(arr+3, arr2, 4) << endl ;

结果是

-1
0
-1
0

怎么做comapre arr 和arr2 ?

我想知道为什么结果是 (-1 0 -1 0 )。

请。

memcmp的第三个参数应该是4*sizeof(int)

memcmp需要两个void*并且不知道类型的宽度,它总是像指针是unsigned char*进行比较,所以你比较的是两个指针指向的前 4 个字节(不是 4 个int

无论如何,如果你这样做,你会在字节序上遇到一些问题。 我会建议使用一些考虑类型的比较函数。

memcmp 的语法是

 int memcmp ( const void * ptr1, const void * ptr2, size_t num );

它将 ptr1 指向的内存块的前 num 个字节与 ptr2 指向的前 num 个字节进行比较,如果它们都匹配则返回零,或者与零不同的值表示如果它们不匹配则更大。

条件 1

如果在两个内存块中不匹配的第一个字节在 ptr1 中的值低于 ptr2 中的值,则 memcmp 的输出将<0

条件 2

如果两个内存块的内容相等,则 memcmp 的输出将为0 ,并且

条件 3

如果在两个内存块中不匹配的第一个字节在 ptr1 中的值大于 ptr2 中的值,则输出将 >0

这是一个简单的程序

    #include <stdio.h>
    #include <string.h>

     int main ()
     {
     char buffer1[] = "NEpAL";
     char buffer2[] = "NEPAL";

      int n;

     n=memcmp ( buffer1, buffer2, sizeof(buffer1) );

     if (n>0) printf ("'%s' is greater than '%s'.\n",buffer1,buffer2);
     else if (n<0) printf ("'%s' is less than '%s'.\n",buffer1,buffer2);
     else printf ("'%s' is the same as '%s'.\n",buffer1,buffer2);

      return 0;
      }

输出将是

“尼泊尔”大于“尼泊尔”。

如 p = 112 和 P=80 。 希望能帮助到你

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM