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

字符数组需为终止符预留空间吗?存10个输入字符时数组大小选10还是11?

数组大小应该设为11,而非10!

嘿,这个问题问到点子上了——很多刚接触C语言字符串的开发者都会在这个细节上踩坑,完全不用致歉,这确实是个容易混淆的点。

直接给结论:你需要把数组大小X设为11,原因其实和你提到的\0终止符直接相关:

  • C语言中的字符串是必须以空终止符\0结尾的,所有标准库的字符串处理函数(比如strlen、printf("%s")、strcmp等)都依赖这个特殊字符来判断字符串的结束位置。
  • 你说最长输入是10个字符(比如"applejacks"刚好是10个字符),如果数组大小只设为10,那么当你把这10个字符存进去后,就没有多余的空间存放\0了。这会触发未定义行为——程序可能会读取到数组之外的内存数据,输出乱码,甚至直接崩溃。

举个简单的代码例子更直观:

// 正确的写法:大小11,能存10个字符+1个\0
char input[11];
// 使用scanf时记得限制读取长度,避免溢出
scanf("%10s", input); // 最多读10个字符,自动在末尾加\0

如果写成char input[10];,当输入10个字符时,scanf会尝试把\0写到数组外面的内存区域,这是非常危险的操作。

总结一下:要存储最多N个字符的字符串,数组的最小大小必须是N+1——N个位置给实际字符,1个位置留给\0终止符。这里N=10,所以X=11是唯一正确的选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:54:28