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

字符数组空间不足时编译器是否会自动添加空终止符?

问题解答
  1. 首先明确C语言标准的统一规定:
  • 字符串字面量"check"本身包含6个字符:5个可见字符+末尾隐式的'\0',但当你用它初始化长度为5的char数组时,编译器只会拷贝前5个可见字符到数组中,不会自动追加'\0'到数组末尾,这一行为是所有符合C标准的编译器统一实现的,不存在差异。
  • 你的代码里str数组的合法访问范围只有下标0~4,这5个位置存储的就是'c'、'h'、'e'、'c'、'k',不存在'\0'。
  1. 你观察到循环停止的原因:
  • 你访问str[5]的时候已经越界了,这个位置不属于str数组的分配空间,只是刚好这块栈内存上的值是0,才让你误以为数组末尾有'\0',这属于典型的未定义行为。
  • 这个现象完全是随机的:换编译器、换编译优化等级、甚至同个程序多次运行,都有可能出现数组后方内存非0的情况,此时循环会继续越界读取内存,直到读到0值、或者触发内存访问错误导致程序崩溃,没有任何可预测性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 06:54:03