C 语言 memcmp()

2025年3月17日 | 阅读 7 分钟

memcmp() 的描述

memcmp() 函数允许用户对两个指定的字节序列进行比较。根据比较结果,它可以返回一个正整数、负整数或零。

该函数定义为 `int memcmp(const void *strng1, const void *strng2, size_t n);`。在这个函数中,计算机将检查对象 `strng1` 的初始 `n` 个字节是否小于、大于或等于对象 `strng2` 的初始 `n` 个字节。该函数定义在 `string.h` 头文件中。因此,要在程序中使用该函数,必须包含此头文件。

声明 memcmp() 函数

声明函数的语法如下:

函数内的参数

strng1: 函数内声明的指针,指向第一个要与第二个对象进行比较的对象的内存位置。

strng2: 此指针指向第二个对象的内存块。

n: 指定需要比较的数据的字节数。

计算后的返回值

该函数在比较两个字节序列的长度后可能返回三种范围的值。

返回值是正整数: 这表示第一个内存块大于第二个内存块。

返回值是负整数: 这表示第一个内存块小于第二个内存块。

返回 0: 这表示第一个内存块等于第二个内存块。

在 C 程序中实现 memcmp() 函数

下面是演示 memcmp() 用法的代码。在下面的代码中,我们将比较两个数组。

输出

memcmp() in C

说明

memcmp() 返回的值将是负数。在上面的例子中,我们在第一个块中存储了“memoryblock1”,在第二个块中存储了“sizeofthememoryblock2”。第一组不同的字符是 'm' 和 's'。由于 's' 的值大于 'm' 的值,因此它将返回一个负整数。

与 C 语言 memcmp() 函数相关的重要事实

  • 要使用 memcmp() 函数,必须在代码中包含 `string.h` 头文件。
  • memcmp() 函数的参数包括指向对象的指针和一个整数 'n'。n 指定从开始处开始进行比较的字符数。
  • 如果两个对象的前导字符相同,则函数将继续比较第二个字符。此过程将重复进行,直到找到不相同的字符或比较到第 n 个元素为止。
  • 如果内存块中的所有元素在比较时都相同,则 memcmp() 返回 0。

让我们通过代码看看上述场景的实现。

输出

memcmp() in C

说明

在上面的示例中,两个数组是相等的。因此,memcmp() 将返回 0,该值将被存储在变量中。
当两个数组的第一个字符不同,并且第一个数组的字符值大于第二个数组的字符值时,函数将返回一个正整数。

让我们来实现一个第一个对象的值大于第二个对象的代码。

输出

memcmp() in C

说明

数组中的第二个元素不同。因此,memcmp() 将评估哪个元素更大。在这种情况下,第一个数组中的元素 9 大于第二个数组中的元素 5。因此,它将返回一个正值作为结果。

5. 假设第一个对象的初始非相同字符小于第二个对象的相应字符。在这种情况下,结果的值将是负整数。

让我们看一个 memcmp() 返回负值的示例。

输出

memcmp() in C

说明

数组中的第一个元素是不同的。因此,memcmp() 将评估哪个元素更小。在这种情况下,第一个数组中的元素 4 小于第二个数组中的元素 5。因此,它将返回一个负值作为结果。

程序员需要选择他们想要进行比较的字符或字节数。这会影响结果,因此程序员必须确保为 n 赋一个有效值。

6. 程序员应确保输入的字节数应始终小于两个对象的大小。否则,可能会返回错误的结果。

输出

memcmp() in C

说明

在上面的程序中,两个数组完全相同。即相等,n 的大小大于两个数组的大小。因此,程序返回了错误的结果。

注意:您不应使用 memcmp() 函数来比较结构,因为它可能返回错误的结果,并且不安全,因为填充字节中始终可能存在垃圾值。

实现自己的 memcmp() 函数

memcmp() 函数已在 C 库中定义,在程序中包含 string.h 头文件后即可轻松使用。库中定义的函数是最有效和高效的。因此,定义或创建自己的 memcmp() 函数是不必要的。

如果您知道某些条件或场景可以简化对象之间的比较,那么您可以定义自己的 memcmp() 函数来提高程序的简洁性。

下面是一个用户自定义 memcmp() 函数的函数定义。此函数未考虑许多场景。因此,如果您想添加更多条件,可以相应地更改代码或使用库函数执行比较。


下一主题#