memcmp内存比较函数

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

cpp 复制代码
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个数据
cpp 复制代码
 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

cpp 复制代码
int nums5[] = { 1,2,4 };
int nums6[] = { 1,2,3 };
printf("%d\n", memcmp(nums5, nums6, 9));//1,比较前9个字节

memcmp函数可以比较任意数据类型(比较结构体等数据不太好观察,此处不做代码演示)

cpp 复制代码
char arr1[] = "abcdeg";
char arr2[] = "abcdef";
printf("%d\n", memcmp(arr1, arr2, 6));//1,比较前6个字节
相关推荐
aaaameliaaa4 小时前
字符函数和字符串函数
c语言·笔记·算法
夜月yeyue4 小时前
AUTOSAR CP 从上电到 Runnable
c语言·网络·tcp/ip·车载系统
白白白小纯6 小时前
算法篇—反转链表
c语言·数据结构·算法·leetcode
小羊先生car7 小时前
RTOS-F429-HAL-绝对延时和相对延时(2026/7/31)
c语言·rtos
caishenzhibiao10 小时前
期货先行者主图 同花顺期货通指标
java·c语言·c#
NoteStream13 小时前
【c语言基础】C语言常见概念
c语言·开发语言·编辑器
caishenzhibiao13 小时前
先行者副图 同花顺期货通指标
java·c语言·c#
回眸不遇14 小时前
将 Docker虚拟磁盘文件ext.vhdx迁移出C盘 ,更换到D盘
c语言·docker·容器
冻柠檬飞冰走茶14 小时前
PTA基础编程题目集 7-27 冒泡法排序(C语言实现)
c语言·开发语言·数据结构·算法
wuyk55514 小时前
77.嵌入式 C 语言中 enum 枚举的工程化实践:告别魔法数字,提升代码可维护性
c语言·开发语言·stm32·单片机·嵌入式硬件