在c语言开发中,strlen函数是最常用的字符串处理函数之一,它用来计算以结尾符结束的字符串长度。理解它的用法可以避免很多缓冲区相关的错误。

一、strlen函数原型与基本用法
strlen函数声明在头文件string.h中,其函数原型如下:
#include <string.h> // 返回字符串s中字符的个数,不包含结尾符' ' size_t strlen(const char *s);
下面是一个最简单的使用示例,演示如何获取字符串长度:
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "hello";
// strlen遇到' '停止计数
size_t len = strlen(str);
printf("长度: %zun", len); // 输出 5
return 0;
}
二、使用strlen的注意事项
1. 必须保证字符串以结尾符结束
如果字符数组没有正确以结尾符结尾,strlen会一直向后读内存,直到碰到随机的零字节,结果不可预期:
#include <stdio.h>
#include <string.h>
int main() {
// 没有结尾符,危险用法
char bad[3] = {'a', 'b', 'c'};
// 可能输出很大的随机数
printf("%zun", strlen(bad));
return 0;
}
2. strlen与sizeof的区别
很多初学者会混淆二者。sizeof是编译期运算符,求的是变量或类型占用的字节数;strlen是运行期函数,只统计结尾符前的字符数。
| 对比项 | strlen | sizeof |
|---|---|---|
| 性质 | 库函数 | 运算符 |
| 计算内容 | 字符串有效字符数 | 内存占用字节数 |
| 是否包含结尾符 | 否 | 是(数组情形) |
#include <stdio.h>
#include <string.h>
int main() {
char s[] = "abc";
printf("strlen: %zun", strlen(s)); // 3
printf("sizeof: %zun", sizeof(s)); // 4,包含' '
return 0;
}
三、常见使用场景
在真实项目里,strlen常用于循环遍历和内存分配:
- 拷贝字符串时确认源长度,避免溢出
- 拼接前计算目标剩余空间
- 按字符逐个处理时作为循环上限
#include <stdio.h>
#include <string.h>
int main() {
char s[] = "world";
size_t n = strlen(s);
for (size_t i = 0; i < n; i++) {
printf("%c ", s[i]);
}
return 0;
}
四、小结
掌握c语言strlen函数的用法,核心就是记住它依赖结尾符、返回字符数而不含结尾符,并且不要和sizeof混用。写代码时保证字符串规范初始化,就能安全利用strlen完成各类字符串长度相关逻辑。