C

memcmp

memcmp

在头文件中定义
int memcmp(const void * lhs,const void * rhs,size_t count);

比较lhs和rhs指向的对象的第一个数字字符。 比较按字典顺序完成。

结果的符号是第一对字节(两者解释为无符号字符)的值在所比较的对象中不同的符号。

如果访问超出lhs和rhs指向的任一对象的末尾,则行为是不确定的。 如果lhs或rhs是空指针,则行为未定义。

参数

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

返回值

如果 lhs 以字典顺序出现在 rhs 之前,则返回负值。

如果lhsrhs比较相等,或如果计数为零,则返回0。

如果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 if(rc == 0) printf(" compares equal to " else if(rc < 0) printf(" precedes " else if(rc > 0) printf(" follows " 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标准(ISO / IEC 9899:2011):

扩展内容

STRCMP比较两个字符串(功能)
STRNCMP比较两个字符串的一定数量的字符(函数)

| memcmp的C ++文档 |