一、strlen 是啥?
strlen 是 C 语言标准库里的一个函数,专门用来计算字符串的长度(不含结尾的 '\\0')。
通俗说:它从字符串开头一个个数,数到 '\\0' 就停,'\\0' 本身不算。
二、怎么用?
#include <string.h> // 别忘了这个头文件
size_t strlen(const char *str);
- 参数:字符指针(字符串首地址)
- 返回值:size_t(无符号整数,就是长度)
三、举个例子
#include <stdio.h>
#include <string.h>
int main() {
char s[] = "hello";
printf("%zu\\n", strlen(s)); // 输出 5
return 0;
}
"hello" 在内存里其实是 h e l l o \\0,strlen 只数到 o,所以是 5。
四、重要!和 sizeof 的区别(面试常问)
| 是函数 | ✅ | ❌ 是运算符 |
| 计算时机 | 运行时 | 编译时 |
| 结果 | 字符串实际字符个数(不含 \\0) | 变量占用的内存字节数数 |
| 对数组 | 遍历直到 \\0 | 返回整个数组大小小 |
char s[] = "hello";
printf("%zu\\n", strlen(s)); // 5
printf("%zu\\n", sizeof(s)); // 6 (因为包含了 '\\0')
五、避坑指南
- 必须保证字符串以 '\\0' 结尾,否则 strlen 会一直往后数,直到遇到内存中的随机 0,结果不可预知(容易崩溃)。
- 不能传 NULL,会段错误。
- 返回值是 size_t,无符号,别和负数比较(易出 bug)。
// 错误示范
char buf[10] = "abc"; // 实际后面自动补 '\\0',安全
char bad[3] = {'a','b','c'}; // 没有 '\\0'!strlen(bad) 危险!
六、自己实现一个简易版(加深理解)
size_t my_strlen(const char *s) {
size_t len = 0;
while (s[len] != '\\0') {
len++;
}
return len;
}
是不是超简单?就是 数到零就停。。
七、总结一句话
strlen 只关心从开头到第一个 '\\0' 之间的字符个数,不关心内存有多大。
如果你觉得有帮助,欢迎点赞、收藏、评论,让更多人看到!
网硕互联帮助中心






评论前必须登录!
注册