为何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
相关产品推荐
相关产品推荐

