​C语言-memcmp(内存块的比较)

 memcmp(内存块的比较)

语法

`memcmp`函数是C语言标准库中的一个函数,用于比较两个内存块的内容是否相等。它定义在`<string.h>`头文件中。`memcmp`函数在比较两个字符串或者任何内存数据时非常有用,它不会检查字符串的长度,只是逐字节比较直到找到一个不同的字符或者比较完所有的字节。
函数原型如下:

```c
int memcmp(const void *s1, const void *s2, size_t n);
```
参数说明:
- `s1`:指向第一个内存块的指针。
- `s2`:指向第二个内存块的指针。
- `n`:要比较的字节数。

返回值:
- 如果`s1`和`s2`所指向的内存内容完全相同,则返回`0`。
- 如果内存内容不同,`memcmp`会返回第一个不同的字节的位置,以`0`为基础。也就是说,如果`s1`中的某个字节与`s2`中的对应字节不同,`memcmp`会返回该字节在`s1`中的偏移量(以字节为单位)。
- 如果`n`为0,则返回`0`。

举例说明:
```c
#include <stdio.h>
#include <string.h>
int main() {
    char str1[] = "Hello";
    char str2[] = "Hello";
    char str3[] = "hello";
    // 比较str1和str2是否相等
    int result1 = memcmp(str1, str2, strlen(str1));
    printf("str1 and str2 are %s\n", result1 == 0 ? "equal" : "not equal");
    // 比较str1和str3是否相等
    int result2 = memcmp(str1, str3, strlen(str1));
    printf("str1 and str3 are %s\n", result2 == 0 ? "equal" : "not equal");
    return 0;
}
```


在上面的例子中,我们定义了三个字符串,分别比较`str1`和`str2`,以及`str1`和`str3`。由于`str1`和`str2`完全相同,`memcmp`返回`0`,表示它们相等。而`str1`和`str3`只有大小写不同,所以`memcmp`会返回第一个不同字节的偏移量,因此`str1`和`str3`不相等。
`memcmp`函数在处理二进制数据时也非常有用,例如,在比较两个文件或者两个数据块是否相同时。在这种情况下,不需要关心数据的长度,只需要比较它们的内容。

内存的比较 这里还是

(地址,地址,比较几个字节)

f4e7a9f42f3644dc8e44fb5a2b1dce8f.png

其实这里和 这个函数很类似C语言-strncmp strncat strncpy长度受限制的字符串函数-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/Jason_from_China/article/details/136724412

具体举例 

fd0ddda7a67547ac8df974b3a299664c.png

af6737632e5245c99a03b283f0e85f79.png

这里比较到低17个字节的时候也就是不一样的 上面的 小 所以 返回的数值是-1

6be9310458fa47c09ab7140b261d4851.png

num的意思是最多比较那麽多的大小 要是在num之前就已经比较出来 那就会返回数值

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
int main()
{
	char arr1[] = "sdfhnjk";
	char arr2[] = "sdfjikh";
	int ret = memcmp(arr1, arr2, 20);
	if (ret == 0)
	{
		printf("相等");
	}
	else
	{
		printf("bu相等");

	}
	return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值