命名空间
变体
操作

strncmp

来自 cppreference.com
< c‎ | string‎ | byte
在头文件 <string.h> 中定义
int strncmp( const char* lhs, const char* rhs, size_t count );

比较最多 count 个可能为空终止的数组的字符。比较是按字典顺序进行的。空字符后面的字符不会被比较。

结果的符号是第一个不同的字符对的值的差的符号(都解释为 unsigned char),这些字符对在被比较的数组中不同。

当访问超出任何数组 lhsrhs 的末尾时,行为未定义。当 lhsrhs 为空指针时,行为未定义。

内容

[编辑] 参数

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

[编辑] 返回值

如果 lhs 在字典顺序中出现在 rhs 之前,则为负值。

如果 lhsrhs 比较相等,或者如果 count 为零,则为零。

如果 lhs 在字典顺序中出现在 rhs 之后,则为正值。

[编辑] 说明

strcollstrxfrm 不同,此函数不依赖于区域设置。

[编辑] 示例

#include <stdio.h>
#include <string.h>
 
void demo(const char* lhs, const char* rhs, int sz)
{
    const int rc = strncmp(lhs, rhs, sz);
    if (rc < 0)
        printf("First %d chars of [%s] precede [%s]\n", sz, lhs, rhs);
    else if (rc > 0)
        printf("First %d chars of [%s] follow [%s]\n", sz, lhs, rhs);
    else
        printf("First %d chars of [%s] equal [%s]\n", sz, lhs, rhs);
}
int main(void)
{
    const char* string = "Hello World!";
    demo(string, "Hello!", 5);
    demo(string, "Hello", 10);
    demo(string, "Hello there", 10);
    demo("Hello, everybody!" + 12, "Hello, somebody!" + 11, 5);
}

输出

First 5 chars of [Hello World!] equal [Hello!]
First 10 chars of [Hello World!] follow [Hello]
First 10 chars of [Hello World!] precede [Hello there]
First 5 chars of [body!] equal [body!]

[编辑] 参考资料

  • C23 标准 (ISO/IEC 9899:2024)
  • 7.24.4.4 strncmp 函数 (p: TBD)
  • C17 标准 (ISO/IEC 9899:2018)
  • 7.24.4.4 strncmp 函数 (p: TBD)
  • C11 标准 (ISO/IEC 9899:2011)
  • 7.24.4.4 strncmp 函数 (p: 366)
  • C99 标准 (ISO/IEC 9899:1999)
  • 7.21.4.4 strncmp 函数 (p: 329)
  • C89/C90 标准 (ISO/IEC 9899:1990)
  • 4.11.4.4 strncmp 函数

[编辑] 另请参阅

比较两个字符串
(函数) [编辑]
比较两个宽字符串中一定数量的字符
(函数) [编辑]
比较两个缓冲区
(函数) [编辑]
根据当前区域设置比较两个字符串
(函数) [编辑]
C++ 文档 用于 strncmp