命名空间
变体
操作

memcmp

来自 cppreference.com
< 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.00.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

[编辑] 参考

  • C23 标准 (ISO/IEC 9899:2024)
  • 7.24.4.1 memcmp 函数 (p: 待定)
  • C17 标准 (ISO/IEC 9899:2018)
  • 7.24.4.1 memcmp 函数 (p: 266)
  • C11 标准 (ISO/IEC 9899:2011)
  • 7.24.4.1 memcmp 函数 (p: 365)
  • C99 标准 (ISO/IEC 9899:1999)
  • 7.21.4.1 memcmp 函数 (p: 328)
  • C89/C90 标准 (ISO/IEC 9899:1990)
  • 4.11.4.1 memcmp 函数

[编辑] 另请参阅

比较两个字符串
(函数) [编辑]
比较两个字符串的特定数量的字符
(函数) [编辑]
C++ 文档 for memcmp