[英]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.