memcmp
memcmp
在头文件 | | |
---|---|---|
int memcmp(const void * lhs,const void * rhs,size_t count); | | |
比较lhs和rhs指向的对象的第一个数字字符。 比较按字典顺序完成。
结果的符号是第一对字节(两者解释为无符号字符)的值在所比较的对象中不同的符号。
如果访问超出lhs和rhs指向的任一对象的末尾,则行为是不确定的。 如果lhs或rhs是空指针,则行为未定义。
参数
lhs,rhs | - | 指向要比较的对象的指针 |
---|---|---|
count | - | 要检查的字节数 |
返回值
如果 lhs 以字典顺序出现在 rhs 之前,则返回负值。
如果lhs
和rhs
比较相等,或如果计数为零,则返回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 ++文档 |