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

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

本文关键字:memcmp 我不知道      更新时间:2023-10-16

我想知道当我执行这个程序时,为什么这个结果是

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 ;

result is

-1
0
-1
0

如何比较arr和arr2 ?

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

memcmp的语法为

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

将ptr1所指向的内存块的前num字节与ptr2所指向的前num字节进行比较,如果它们都匹配,则返回0;如果不匹配,则返回不同于0的值。

条件1

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

条件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。希望能有所帮助

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

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

无论如何,如果您这样做,您将在端序上遇到一些问题。我建议使用一些比较函数来考虑类型

相关文章: