C strncmp() 语法
strncmp() 是 C 语言 <string.h> 标准库的一个函数,它用于比较两个字符串的大小。需要注意的是,strncmp() 只会比较前 n 个字符。
语法:
strncmp(str1, str2, n)说明:
strncmp() 函数接收以下 3 个参数。
str1(const char*):第 1 个字符串的指针。str2(const char*):第 2 个字符串的指针。n(size_t):需要比较多少个字符。
strncmp() 函数会返回一个整数,以表示比较结果。
- 如果 str1 小于 str2,则返回一个 “负数” 。
- 如果 str1 等于 str2,则返回 “0” 。
- 如果 str1 大于 str2,则返回一个 “正数” 。
提示: strncmp 是 “string n compare” 的缩写。
C strncmp() 摘要
| 使用频率 | 高 |
|---|---|
| 修改字符串 | 否 |
| 官方文档 | 查看 |
C strncmp() 示例
接下来,我们通过一个简单的例子来讲解一下 C strncmp() 函数是如何使用的。
示例:strncmp() 基本用法
#include <stdio.h>
#include <string.h>
int main(void)
{
char str1[] = "abcde";
char str2[] = "abxde";
int result = strncmp(str1, str2, 3);
printf("%d", result);
return 0;
}运行结果如下。
-21分析:
strncmp(str1, str2) 返回了一个负数(-21),不同编译器可能会返回 -1,但意义相同,都是表示 str1 小于 str2。这里小伙伴就肯定就会疑问:“对两个字符串进行大小比较,它们究竟是比较些什么呢?”
如果对两个字符串进行大小比较,strncmp() 其实就是从它们的首个字符开始一一对比,直到出现第一个不同的字符为止。接着我们就对比这两个不同字符的 “ASCII 码” 的大小。ASCII 码较大的,就表示该字符串较大。
比如上面这个例子中的 str1 和 str2,它们前 2 个字符是相同的,这里还没有 “分出胜负”。到了第 3 个字符,'c' 的 ASCII 码肯定比 'x' 的 ASCII 码小,所以也就代表 str1 比 str2 小。
对于上面例子来说,如果我们把 strncmp(str1, str2, 3) 修改为 strncmp(str1, str2, 2),此时返回的结果就是 0,小伙伴们可以思考一下为什么。
strncmp() 的应用场景
在实际开发中,strncmp() 函数适用于需要比较字符串的特定前缀,或在有限范围内进行字符串比较的场景,比如:
- 判断一个字符串是否以特定的前缀开头。
- 解析固定格式的数据行,比较开头部分的标识符。
- 实现简单的命令解析,判断用户输入是否是某个命令。
- 在处理可能存在缓冲区溢出风险的字符串时,提供一种更安全的比较方式。
与 strcmp() 类似,strncmp() 也是区分大小写的。如果需要进行不区分大小写的前缀比较,我们可以考虑使用 strncasecmp() 函数(非标准的 POSIX 函数)或其他方法。
