命名空间
变体
操作

std::memcmp

来自 cppreference.com
< cpp‎ | string‎ | byte
定义在头文件 <cstring>
int memcmp( const void* lhs, const void* rhs, std::size_t count );

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

结果的符号是正在比较的对象中第一个不同的字节对(都解释为 unsigned char)的值之差的符号。

内容

[编辑] 参数

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

[编辑] 返回值

如果 lhs 中第一个不同的字节(重新解释为 unsigned char)小于 rhs 中的相应字节,则为负值。

0 如果 lhsrhs 的所有 count 个字节相等。

如果 lhs 中第一个不同的字节大于 rhs 中的相应字节,则为正值。

[编辑] 注释

此函数读取 对象表示,而不是对象的值,通常只对没有填充的平凡可复制对象有意义。例如,两个类型为 std::stringstd::vector 的对象之间的 memcmp() 不会比较它们的内容,两个类型为 struct { char c; int n; } 的对象之间的 memcmp() 将比较填充字节,当 cn 的值相同时,填充字节的值可能不同,即使没有填充字节,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