字符数组需为终止符预留空间吗?存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
相关产品推荐
相关产品推荐

