memcmp内存比较函数

简介: 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

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个字节


目录
相关文章
|
3小时前
|
程序员 C语言
C语言库函数 — 内存函数(含模拟实现内存函数)
C语言库函数 — 内存函数(含模拟实现内存函数)
33 0
|
3小时前
|
编译器 C语言 C++
【C语言】realloc()函数详解(动态内存开辟函数)
【C语言】realloc()函数详解(动态内存开辟函数)
30 0
|
3小时前
|
编译器 C语言 C++
【C语言】malloc()函数详解(动态内存开辟函数)
【C语言】malloc()函数详解(动态内存开辟函数)
65 2
|
3小时前
|
编译器 C语言 C++
【C语言】memset()函数(内存块初始化函数)
【C语言】memset()函数(内存块初始化函数)
27 0
|
3小时前
|
编译器 C语言 C++
【C语言】memcpy()函数(内存块拷贝函数)
【C语言】memcpy()函数(内存块拷贝函数)
45 0
|
3小时前
|
C语言
C语言:内存函数(memcpy memmove memset memcmp使用)
C语言:内存函数(memcpy memmove memset memcmp使用)
|
3小时前
|
编译器 C语言
字符串与内存函数
字符串与内存函数
26 0
|
3小时前
|
存储 编译器 C语言
C语言:字符函数 & 字符串函数 & 内存函数
C语言:字符函数 & 字符串函数 & 内存函数
15 2
|
3小时前
|
编译器
练习使用动态内存相关的4个函数:malloc、calloc、realloc、free
在了解使用动态内存相关的四个函数之前,我们先了解一下,为什么要有动态内存分配?
16 0