C语言中sizeof与strlen的核心区别与应用场景

慢慢来
慢慢来
发布时间:2026-10-14 | 3人浏览过
原创

在C语言开发中,许多初学者容易混淆sizeof运算符与strlen函数。前者用于获取内存分配的物理大小(字节数),后者用于获取字符串的逻辑长度(字符数)。理解两者的执行时机、参数要求及返回值差异,是编写稳健代码的关键。

核心机制与执行时机

sizeof 是一个一元运算符,通常在编译阶段计算其操作数占用的内存大小。它可以接受类型名或变量作为参数。当传入类型名时需使用括号(如 sizeof(short)),而传入变量名时括号可选。对于静态数组,sizeof 返回整个数组分配的内存总量,且无法获取动态分配数组或外部数组的尺寸。

strlen 则是标准库函数,仅在运行时执行。它严格要求参数为 char* 类型的指针,且指向的内存区域必须以空字符 '\0' 结尾。其返回值是第一个 '\0' 之前的字符个数,不包含结束符本身。

静态数组中的表现差异

当处理定长的字符数组时,两者的区别尤为明显。sizeof 反映的是数组定义的总容量,无论其中填充了多少有效字符;而 strlen 仅统计有效内容的长度。

char str[20] = "0123456789";
int a = strlen(str); // 结果为 10,即数字字符的数量
int b = sizeof(str); // 结果为 20,即数组申请的总字节数

指针类型的处理逻辑

在使用指针时,sizeof 的行为往往产生误解。它返回的是指针变量本身所占的栈空间大小,而非指针指向内容的长度。在32位系统上,指针通常占用4字节;在64位系统上通常为8字节。

char* ss = "0123456789";
// sizeof(ss) 结果为 4 (或8),这是指针变量的大小
// *ss 解引用得到第一个字符 '0',sizeof(*ss) 结果为 1 (char类型大小)
// strlen(ss) 结果为 10,正确计算了字符串的有效长度

应用场景总结

  • 内存管理: 申请缓冲区、计算结构体大小时,应使用 sizeof。
  • 文本处理: 涉及字符串遍历、比较或截取时,必须使用 strlen。
  • 风险提醒: 若使用 strlen 时字符串未正确以 '\0' 结尾,会导致越界访问和未定义行为;若误用 sizeof 获取动态数组长度,则会得到固定指针的大小而非预期数据量。

以上就是C语言sizeof和strlen区别的详细内容,更多关于C语言基础语法的资料请关注本站其它相关文章!

相关标签:

本站声明

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

Python 相关产品和应用

全部下载

专题列表