# std::strncmp

< cpp‎ | string‎ | byte

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

比较二个可能空终止的数组的至多 `count` 个字符。按字典序进行比较。不比较后随空字符的字符。

结果的符号是被比较的数组中首对字符（都转译成 unsigned char ）的值间的差的符号。

若出现越过 `lhs` 或 `rhs` 结尾的访问，则行为未定义。若 `lhs` 或 `rhs` 为空指针，则行为未定义。

### 参数

lhs, rhs | - | 指向要比较的可能空终止的数组的指针
count | - | 要比较的最大字符数

### 返回值

若字典序中 `lhs` 先出现于 `rhs` 则为负值。

若 `lhs` 与 `rhs` 比较相等，或若 count 为零，则为零。

若字典序中 `lhs` 后出现于 `rhs` 则为正值。

### 注解

不同于 std::strcoll 和 std::strxfrm ，此函数不考虑本地环境。

### 示例

    #include <cstring>
    #include <iostream>

    void demo(const char* lhs, const char* rhs, int sz)
    {
        int rc = std::strncmp(lhs, rhs, sz);
        if(rc == 0)
            std::cout << "First " << sz << " chars of ["
                      << lhs << "] equal [" << rhs << "]\n";
        else if(rc < 0)
            std::cout << "First " << sz << " chars of ["
                      << lhs << "] precede [" << rhs << "]\n";
        else if(rc > 0)
            std::cout << "First " << sz << " chars of ["
                      << lhs << "] follow [" << rhs << "]\n";
    }
    int main()
    {
        demo("Hello, world!", "Hello, everybody!", 13);
        demo("Hello, everybody!", "Hello, world!", 13);
        demo("Hello, everybody!", "Hello, world!", 7);
        demo("Hello, everybody!" + 12, "Hello, somebody!" + 11, 5);
    }

输出：

    First 13 chars of [Hello, world!] follow [Hello, everybody!]
    First 13 chars of [Hello, everybody!] precede [Hello, world!]
    First 7 chars of [Hello, everybody!] equal [Hello, world!]
    First 5 chars of [body!] equal [body!]

### 参阅

strcmp | 比较两个字符串 (函数)
wcsncmp | 比较来自两个宽字符串的一定量宽字符 (函数)
memcmp | 比较两个缓冲区 (函数)
strcoll | 按照当前本地环境比较两个字符串 (函数)