C语言获取字符串长度的几种方法

在c语言中获取字符串的长度是我们开发中常见的需求,比如检查用户输入字符串的长度、字符串截取、字符串拼接等这些操作都需要计算字符串的长度。

下面介绍C语言获取字符串长度的几种方法,根据示例您可以快速上手使用。

1. 使用标准库函数 strlen

它是最为简单高效的使用方式,需包含头文件 <string.h>
建议使用该方法,看下面的例子
#include <stdio.h>
#include <string.h>

int main() {
    char str[] = "online-compiler.com";
    size_t len = strlen(str);  // 返回值为19
    printf("Length: %zu\n", len);
    return 0;
} 

其原理是遍历字符串直到遇到\0,返回计数值。

2. 使用自定义函数遍历计算

更加灵活,适合特殊场景使用,看下面的例子。

#include <stdio.h>

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 <stdio.h>

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 <stdio.h>

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 <stdio.h>

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)静态数组零运行时开销仅限静态数组,不通用