You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何char数组ptr1大小为4时,strlen返回值为1?

为什么char数组ptr1大小为4,调用strlen却返回1?

关键知识点与原因:

  • strlen的计数规则:它从传入的指针位置开始遍历内存,直到遇到第一个'\0'空字符时停止,返回的是该空字符之前的字符数量(不包含'\0'本身)。
  • 未初始化的局部数组:代码中的char ptr1[4]是局部栈数组,没有被显式初始化。C语言规定,未初始化的局部变量/数组会保留栈上的随机垃圾值,不会自动填充'\0'。
  • 本次运行返回1的巧合:在当前运行环境中,ptr1数组的第二个元素(索引为1的位置)恰好是'\0',而第一个元素是一个非空的垃圾字节。strlen遍历到这个'\0'就停止计数,因此返回1。
  • 注意:这种结果属于未定义行为——换个运行环境、甚至同一环境再次运行,结果可能是0、3,甚至程序崩溃。如果数组内存中一直找不到'\0',strlen会越界访问内存,引发不可预测的问题。

内容的提问来源于stack exchange,提问作者IsmailBarrous

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 04:10:37