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`函数在处理二进制数据时也非常有用,例如,在比较两个文件或者两个数据块是否相同时。在这种情况下,不需要关心数据的长度,只需要比较它们的内容。
内存的比较 这里还是
(地址,地址,比较几个字节)
其实这里和 这个函数很类似C语言-strncmp strncat strncpy长度受限制的字符串函数-CSDN博客https://blog.csdn.net/Jason_from_China/article/details/136724412
具体举例
这里比较到低17个字节的时候也就是不一样的 上面的 小 所以 返回的数值是-1
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;
}