Namespaces
Variants

std:: strncmp

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

比较两个可能以空字符结尾的数组,最多比较 count 个字符。该比较按字典序执行。空字符之后的字符不会被比较。

结果的符号取决于数组中第一对不相同字符(均解释为 unsigned char )数值之差的符号。

当访问超出 lhs rhs 任意数组末尾时,其行为是未定义的。当 lhs rhs 为 null 指针时,其行为也是未定义的。

目录

参数

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)
{
    const int rc = std::strncmp(lhs, rhs, sz);
    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";
    else
        std::cout << "First " << sz << " chars of ["
                  << lhs << "] equal [" << 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!]

参见

比较两个字符串
(函数)
比较两个宽字符串的指定数量字符
(函数)
比较两个缓冲区
(函数)
根据当前区域设置比较两个字符串
(函数)
C 文档 for strncmp