首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

memcmp

在头文件<string.h>中定义

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,类型中的不确定填充位)。

代码语言:javascript
复制
#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);
}

输出:

代码语言:javascript
复制
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):
    • 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函数

扩展内容

STRCMP

比较两个字符串(功能)

STRNCMP

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

| memcmp的C ++文档 |

扫码关注腾讯云开发者

领取腾讯云代金券