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个字节
相关推荐
DARLING Zero two♡1 小时前
【初阶数据结构】逆流的回环链桥:双链表
c语言·数据结构·c++·链表·双链表
9毫米的幻想1 小时前
【Linux系统】—— 编译器 gcc/g++ 的使用
linux·运维·服务器·c语言·c++
时时三省3 小时前
【时时三省】(C语言基础)文件的顺序读写
c语言
graceyun3 小时前
C语言进阶习题【1】指针和数组(4)——指针笔试题3
android·java·c语言
快乐飒男9 小时前
面试题目1
c语言
小猿_0010 小时前
C语言程序设计十大排序—插入排序
c语言·算法·排序算法
siy233314 小时前
[c语言日寄]结构体的使用及其拓展
c语言·开发语言·笔记·学习·算法
安和昂15 小时前
effective Objective—C 第三章笔记
java·c语言·笔记
四念处茫茫15 小时前
【C语言系列】深入理解指针(2)
c语言·开发语言·visual studio
LucianaiB15 小时前
C语言之图像文件的属性
c语言·开发语言·microsoft·c语言之图像文件的属性