非常教程

C参考手册

字符串 | Strings

strncmp

在头文件<string.h>中定义

int strncmp(const char * lhs,const char * rhs,size_t count);

比较两个可能以null结尾的数组的最多数字符。 比较按字典顺序完成。

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

当访问发生在数组lhs或rhs的末尾时,行为是不确定的。 当lhs或rhs是空指针时,行为是不确定的。

参数

lhs,rhs

-

指向可能以null结尾的数组进行比较的指针

count

-

最大数量的字符进行比较

返回值

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

如果lhs和rhs比较相等,或者计数为零,则为零。

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

注意

与strcoll和strxfrm不同,此函数不是区域设置敏感的。

#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标准(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函数

扩展内容

STRCMP

比较两个字符串(功能)

wcsncmp(C95)

比较来自两个宽字符串(函数)的一定数量的字符

memcmp

比较两个缓冲区(功能)

与strcoll

根据当前语言环境(函数)比较两个字符串

| strncmp的C ++文档 |

C

C 语言是一门通用计算机编程语言,应用广泛。C 语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。