memcmp

< c‎ | string‎ | byte
定义于头文件 <string.h>
int memcmp( const void* lhs, const void* rhs, size_t count );

比较 lhsrhs 所指向对象的首 count 个字节。比较按字典序进行。

结果的符号是在被比较对象中相异的首对字节的值(都转译成 unsigned char )的差。

若在 lhsrhs 所指向的任一对象结尾后出现访问,则行为未定义。若 lhsrhs 为空指针则行为未定义。

参数

lhs, rhs - 指向要比较的对象的指针
count - 要检验的字节数

返回值

lhs 以字典序出现前于 rhs 则为负值。

lhsrhs 比较相等,或 count 为零则为零。

lhs 以字典序出现后于 rhs 则为正值。

注意

此函数读取对象表示,而非对象值,而且典型地只对字节数组有意义:结构体可以含有填充字节而其值不确定,存储于联合体最近存储成员后的任何字节的值是不确定的,且一个类型可以对相同值拥有二种或多种表示(对于 +0 和 -0 或 +0.0 和 –0.0 的相异编码、类型中不确定填充位)。

示例

#include <stdio.h>
#include <string.h>
 
void demo(const char* lhs, const char* rhs, size_t sz)
{
    for(size_t n = 0; n < sz; ++n)
        putchar(lhs[n]);
 
    int rc = memcmp(lhs, rhs, sz);
    const char *rel = rc < 0 ? " precedes " : rc > 0 ? " follows " : " compares equal ";
    fputs(rel, stdout);
 
    for(size_t n = 0; n < sz; ++n)
        putchar(rhs[n]);
    puts(" in lexicographical order");
}
 
int main(void)
{
    char a1[] = {'a','b','c'};
    char a2[sizeof a1] = {'a','b','d'};
 
    demo(a1, a2, sizeof a1);
    demo(a2, a1, sizeof a1);
    demo(a1, a1, sizeof a1);
}

输出:

abc precedes abd in lexicographical order
abd follows abc in lexicographical order
abc compares equal to abc in lexicographical order

引用

  • C11 standard (ISO/IEC 9899:2011):
  • 7.24.4.1 The memcmp function (p: 365)
  • C99 standard (ISO/IEC 9899:1999):
  • 7.21.4.1 The memcmp function (p: 328)
  • C89/C90 standard (ISO/IEC 9899:1990):
  • 4.11.4.1 The memcmp function

参阅

比较两个字符串
(函数)
比较两个字符串的一定数量字符
(函数)