C 参考手册

定义于头文件 <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 <string.h>
#include <stdio.h>
 
void demo(const char* lhs, const char* rhs, int sz)
{
    int rc = strncmp(lhs, rhs, sz);
    if(rc == 0)
        printf("First %d chars of [%s] equal [%s]\n", sz, lhs, rhs);
    else 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);
 
}
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!]

引用

  • C11 standard (ISO/IEC 9899:2011):
  • 7.24.4.4 The strncmp function (p: 366)
  • C99 standard (ISO/IEC 9899:1999):
  • 7.21.4.4 The strncmp function (p: 329)
  • C89/C90 standard (ISO/IEC 9899:1990):
  • 4.11.4.4 The strncmp function

参阅

比较两个字符串
(函数)
比较来自两个宽字符串的一定量字符
(函数)
比较两块缓冲区
(函数)
比较两个字符串,根据当前本地环境
(函数)