C语言获取字符串长度的3种常用方法对比

山间有风
山间有风
发布时间:2026-10-16 | 12人浏览过
原创

在C语言编程中,准确获取字符串长度是基础且关键的操作。本文将详细介绍使用 sizeof 运算符、标准库函数 strlen 以及手动编写循环函数这三种常见方法,并通过实例分析它们在处理含 \0 字符时的差异,助你避坑并提升代码效率。

一、使用 sizeof() 运算符

在C语言中,sizeof 是一个编译期运算符,主要用于计算数据类型或变量所占用的内存字节数。它并非专门用于测量字符串内容长度,而是测量分配的存储空间大小。

第1步:理解基本用法与机制

sizeof 后跟类型名或表达式均可。例如:

int i = 10;
size_t size_i = sizeof(i); // 计算变量 i 占用的字节数

char str[] = "hello";
size_t size_str = sizeof(str); // 计算字符数组 str 的总字节数

关键注意点:

  • 包含 '\0': sizeof 计算的是数组分配的总内存,因此会将字符串末尾的空字符 '\0' 一并计算在内。例如,char s[5] = { 'a', 'b', 'c', 'd', '\0' } 的 sizeof 结果为 5。
  • 固定数组陷阱: 如果声明了固定大小的数组,如 char str[100] = "";,即使字符串为空,sizeof(str) 的值依然是 100,因为它反映的是数组的容量而非字符串内容的实际长度。

二、使用 strlen 函数

若需获取字符串的实际有效字符长度(不包含末尾的 '\0'),应使用标准库提供的 strlen 函数。

第2步:正确引入头文件并调用

strlen 定义在 <string.h> 头文件中。其原型为:

size_t strlen(const char *str);

操作说明:

  1. 入口: 确保源文件顶部已添加 #include <string.h>。
  2. 动作: 传入指向字符串起始位置的指针。strlen 会遍历内存直到遇到第一个 '\0' 停止,返回此前经过的字符数量。
  3. 结果: 返回类型为 size_t(无符号整数)。对于字符串 "abcd",strlen 返回 4,而前文提到的 sizeof 可能返回 5(取决于是否显式分配额外空间)。

三、编写自定义长度获取函数

在不依赖标准库的情况下,可以通过指针遍历手动计算字符串长度。这种方法有助于深入理解内存遍历原理。

第3步:实现指针遍历逻辑

以下代码演示了一种高效的写法:利用指针移动和空字符判断条件来统计长度。

int get_length(char str[])
{
    char *p = str;      // 初始化指针指向字符串开头
    int count = 0;      // 计数器初始化为0

    // 当指针指向的内容不为 '\0' 时继续循环
    while (*p++ != '\0')
    {
        count++;        // 每读取一个非空字符,计数加1
    }
    return count;       // 返回最终累计的长度
}

逻辑解析: *p++ 表示先取值再自增。循环会在读取到 '\0' 时终止。由于 '\0' 本身不等于 0 的测试条件失败,循环退出,此时 count 记录的是 '\0' 之前的所有字符数,即不包含 '\0' 的有效长度。

四、综合测试与结果对比

为了直观展示三者差异,我们将上述方法整合到一个完整的测试案例中。输入相同的字符串 "abcd",观察不同方法的输出结果。

第4步:运行测试代码验证

#include <stdio.h>
#include <string.h>

// 复用上文定义的 get_length 函数
int get_length(char str[])
{
    char *p = str;
    int count = 0;
    while (*p++ != '\0')
    {
        count++;
    }
    return count;
}

int main()
{
    char str[] = "abcd";

    // 测试 sizeof:注意这里 str 是局部数组,会被初始化为内容+\0
    int len_sizeof = sizeof(str);

    // 测试 strlen
    int len_strlen = strlen(str);

    // 测试自定义函数
    int len_custom = get_length(str);

    printf("use sizeof the length is %d\n", len_sizeof);
    printf("use strlen the length is %d\n", len_strlen);
    printf("use get_length the length is %d\n", len_custom);

    return 0;
}

预期输出结果:

结果分析:

  • sizeof(str) 输出 5:因为数组 "abcd" 在内存中占用 5 个字节(4个字母 + 1个结尾 '\0')。
  • strlen(str) 输出 4:只统计可见字符,忽略结尾符。
  • get_length(str) 输出 4:逻辑同 strlen,正确识别有效长度。

五、总结

在C语言开发中,选择哪种方法取决于你的具体需求:
- 如果需要知道内存块的大小(如动态分配内存边界检查),使用 sizeof。
- 如果需要知道字符串内容的实际有效字符数(如日志打印、算法处理),务必使用 strlen 或类似的自定义遍历函数。

以上就是C语言多种获取字符串长度的详细对比与实操内容,更多关于C语言基础入门的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表