# std::memcmp

< cpp‎ | string‎ | byte

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

转译 `lhs` 和 `rhs` 所指向的对象为 unsigned char 数组，并比较这些数组的首 `count` 个字符。按字典序比较。

结果的符号是在被比较对象中相异的首对字节的值（都转译成 unsigned char ）的差。

### 参数

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

### 返回值

若 `lhs` 中首个相异字节（转译为 unsigned char ）小于 `rhs` 中的对应字节则为负值。

若 `lhs` 和 `rhs` 的所有 `count` 个字节相等则为 ​0​ 。

若 `lhs` 中首个相异字节大于 `rhs` 中的对应字节则为正值。

### 注意

此函数读取对象表示，而非对象值，而且典型地只对无填充的可平凡复制对象有意义。例如二个 std::string 或 std::vector 类型对象间的 `memcmp()` 将不比较其内容，而二个 struct{char c; int n;} 类型对象间的 `memcmp()` 将比较填充字节，其值在 c 和 n 相同时可以相异。

### 示例

    #include <iostream>
    #include <cstring>

    void demo(const char* lhs, const char* rhs, std::size_t sz)
    {
        std::cout << std::string(lhs, sz);
        int rc = std::memcmp(lhs, rhs, sz);
        if(rc == 0)
            std::cout << " compares equal to ";
        else if(rc < 0)
            std::cout << " precedes ";
        else if(rc > 0)
            std::cout << " follows ";
        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

### 参阅

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