
C语言获取字符串长度的几种方法
在c语言中获取字符串的长度是我们开发中常见的需求,比如检查用户输入字符串的长度、字符串截取、字符串拼接等这些操作都需要计算字符串...
在c语言中获取字符串的长度是我们开发中常见的需求,比如检查用户输入字符串的长度、字符串截取、字符串拼接等这些操作都需要计算字符串的长度。
下面介绍C语言获取字符串长度的几种方法,根据示例您可以快速上手使用。
1. 使用标准库函数 strlen它是最为简单高效的使用方式,需包含头文件
#include
#include
int main() {
char str[] = "online-compiler.com";
size_t len = strlen(str); // 返回值为19
printf("Length: %zu\n", len);
return 0;
} 测试一下 其原理是遍历字符串直到遇到\0,返回计数值。
2. 使用自定义函数遍历计算更加灵活,适合特殊场景使用,看下面的例子。
#include
size_t strlen(const char *s) {
size_t len = 0;
while (s[len] != '\0') {
len++;
}
return len;
}
int main() {
char str[] = "online";
size_t len = strlen(str); // 返回值为6
printf("Length: %zu\n", len);
return 0;
} 测试一下
其原理和方法1一样,通过循环逐个检查字符是否为\0,统计长度。
3. 通过指针计算通过指针移动计算起始地址与终止地址的差值,看下面的例子。
#include
size_t ptr_strlen(const char *s) {
const char *p = s;
while (*p != '\0') p++;
return p - s;
}
int main() {
char str[] = "online";
size_t len = ptr_strlen(str); // 返回值为6
printf("Length: %zu\n", len);
return 0;
} 4. 递归实现递归检查每个字符,直到\0。
不建议使用该方法计算字符串长度。
#include
size_t recursive_strlen(const char *s) {
if (*s == '\0') return 0;
return 1 + recursive_strlen(s + 1);
}
int main() {
char str[] = "online";
size_t len = recursive_strlen(str); // 返回值为6
printf("Length: %zu\n", len);
return 0;
} 5.利用 sizeof 计算静态数组长度仅适用于在定义作用域内获取静态字符数组的长度(不包括动态字符串),若数组未显式初始化或为指针,sizeof无法正确计算字符串长度。
#include
int main() {
char str[] = "online"; // 静态数组
size_t len = sizeof(str) - 1; // 减1排除末尾的'\0',返回值为6
printf("Length: %zu\n", len);
return 0;
} 区别建议方法时间复杂度空间复杂度适用场景优点缺点strlenO(n)O(1)通用场景高效、可读性好需保证字符串以\0结尾自定义函数O(n)O(1)无库环境、自定义逻辑可控性强,可优化代码冗长指针算术O(n)O(1)高效遍历、指针操作简洁,适合复杂操作需理解指针递归O(n)O(n)教学示例展示递归思想栈溢出风险,效率极低sizeofO(1)O(1)静态数组零运行时开销仅限静态数组,不通用