1.头文件:string.h
2.函数原型:int memcmp(const void *ptr1, const void *ptr2, size_t num)
3.函数功能:比较两块内存中数据的大小
4.参数解释:
比较 ptr1 和 ptr2 两个指针所指向的两块内存中的前 num 个字节
5.返回值:
逐字节比较
当ptr1指针指向的内存中的数据 小于 ptr2指针指向的内存中的数据 ,返回 -1
当ptr1指针指向的内存中的数据 等于 ptr2指针指向的内存中的数据 ,返回 0
当ptr1指针指向的内存中的数据 大于 ptr2指针指向的内存中的数据 ,返回 1
6.实例代码:
memcmp函数逐字节比较时,只根据第一次不相同的字节来返回结果值
例如在比较nums3和nums4中的数据时,虽然nums3中后三个数据全部比nums4中后三个数据大,但是nums3的第二个数据小于nums4的第二个数据,因此返回-1
int nums1[] = { 1,2,3,4,5,6,7,8,9 }; int nums2[] = { 1,2,3,4,9 }; printf("%d\n", memcmp(nums1, nums2, sizeof(int) * 4));//0,比较前4个数据 printf("%d\n", memcmp(nums1, nums2, sizeof(int) * 5));//-1,比较前5个数据
int nums3[] = { 1,0,3,3,3 }; int nums4[] = { 1,2,0,0,0 }; printf("%d\n", memcmp(nums3, nums4, sizeof(int) * 5));//-1,比较前5个数据
可以不比较完整的一个数据,那么就要看数据的存储是大端存储还是小端存储
我的机器存储是小端存储,那么nums1中的数据存储:01 00 00 00 02 00 00 00 04 00 00 00
nums2中的数据存储:01 00 00 00 02 00 00 00 03 00 00 00
只比较前9个字节,就是比较到加粗字节处(04 和 03),因此返回结果为1
int nums5[] = { 1,2,4 }; int nums6[] = { 1,2,3 }; printf("%d\n", memcmp(nums5, nums6, 9));//1,比较前9个字节
memcmp函数可以比较任意数据类型(比较结构体等数据不太好观察,此处不做代码演示)
char arr1[] = "abcdeg"; char arr2[] = "abcdef"; printf("%d\n", memcmp(arr1, arr2, 6));//1,比较前6个字节