命名空间
变体
操作

strncmp

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

比较两个可能以 null 结尾的数组中的最多 count 个字符。比较以字典序进行。null 字符后面的字符不进行比较。

结果的符号是所比较数组中第一个不同字符对(两者均解释为 unsigned char)的值之差的符号。

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

目录

[编辑] 参数

lhs, rhs - 指向可能以 null 结尾的要比较数组的指针
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