我想知道当我执行这个程序时为什么会出现这个结果
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)。
请
答案 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。希望它有所帮助