Namespaces
Variants

std:: memcmp

From cppreference.net
定义于头文件 <cstring>
int memcmp ( const void * lhs, const void * rhs, std:: size_t count ) ;

lhs rhs 所指向的对象重新解释为 unsigned char 数组,并比较这两个数组的前 count 个字节。比较按字典序进行。

结果的符号取决于对象比较中第一对不同的字节值(均解释为 unsigned char )的差值符号。

目录

参数

lhs, rhs - 待比较的内存缓冲区指针
count - 需要检查的字节数

返回值

若第一个不同的字节(重新解释为 unsigned char )在 lhs 中小于 rhs 中的对应字节,则返回负值。

0 lhs rhs 的全部 count 字节均相等。

lhs 中首个不同字节的值大于 rhs 中对应字节的值,则返回正值。

注释

此函数读取的是 对象表示 而非对象值,通常仅对无填充字节的可平凡复制对象有意义。例如:对两个 std::string std::vector 类型对象进行 memcmp() 不会比较其内容;对两个 struct { char c ; int n ; } 类型对象进行 memcmp() 会比较可能因 c n 值相同而不同的填充字节;即使没有填充字节, int 的比较也不会考虑字节序差异。

示例

#include <cstring>
#include <iostream>
void demo(const char* lhs, const char* rhs, std::size_t sz)
{
    std::cout << std::string(lhs, sz);
    const int rc = std::memcmp(lhs, rhs, sz);
    if (rc < 0)
        std::cout << " precedes ";
    else if (rc > 0)
        std::cout << " follows ";
    else
        std::cout << " compares equal to ";
    std::cout << std::string(rhs, sz) << " in lexicographical order\n";
}
int main()
{
    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

参见

比较两个字符串
(函数)
比较两个字符串中的指定数量字符
(函数)
C 文档 关于 memcmp