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

时间:2016-09-23 06:23:21

标签: 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)。

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

memcmp的语法是

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

它将ptr1指向的内存块的第一个num字节与ptr2指向的第一个num字节进行比较,如果它们全部匹配则返回零,或者如果它们不匹配则返回0,如果不匹配则返回更大值。

条件1

如果两个内存块中不匹配的第一个字节在ptr1中的值低于ptr2中的值,那么memcmp的输出将为&lt; 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;
      }

输出将是

'NEpAL'大于'NEPAL'。

为p = 112且P = 80。希望它有所帮助