C语言关于数组空间大小的问题

问题是无论我怎么输入,为什么数组每个格子里的空间都是足够的,不会出现截断,程序出错,这是什么原因?不是说char只有一个字节吗?那么,数组每个格子里不是只能存放1个字母,... 问题是无论我怎么输入,为什么数组每个格子里的空间都是足够的,不会出现截断,程序出错,这是什么原因?不是说char只有一个字节吗?那么,数组每个格子里不是只能存放1个字母,可为什么我下列程序代码却没有错误。
int main(void)
{
int i = 0;
char a[1];
scanf("%s",a);
printf("%s",a);
system("PAUSE");
return 0;
}
展开
 我来答
百度网友ca5cbf3
2011-03-06 · TA获得超过130个赞
知道答主
回答量:67
采纳率:100%
帮助的人:51.8万
展开全部
是这样的:定义char a[1]的时候,计算机给这个数组分配了存放空间,这个空间的首地址为a,空间大小为仅仅能存放一个字符的空间。但是为什么你输入很多字符,然后运行,仍然能正确输出呢?问题在于a是一个首地址,c默认是你知道你要操作的对象是多长的。如果你把3个字符“xyz”强行送给地址a,那么,他就把x存放在a的位置,y存放在a+1的位置,z存放在a+2的位置,依次向后递增,这就是指针。

由于你输入的字符串并不是很长,相对于现在计算机的内存,微不足道,所以没有发生溢出的错误,程序就不报错。如果你输入很长的字符串,恰巧到了a+n,而a+n正在被其他进程使用,那么就惨了,计算机可能提示你溢出了,或者内存非法使用了。此时应该定义足够长的数组,比如char a[1000],使计算机一开始就给你分配足够的内存,问题就不会再出现了。

但愿能帮到你噢~~~
sun_siliang
2011-03-06 · TA获得超过2.6万个赞
知道大有可为答主
回答量:9913
采纳率:100%
帮助的人:4887万
展开全部
在VC++ 2005调试会报执行错的。
char a[1];//数组a只有一个元素
scanf("%s",a);//将输出的字符放入以地址a开始的单元中,且最后一个字符为'\0',显示数组超界了。
//C语言不对数组超界作检查。
printf("%s",a);//输出字符串
system("PAUSE");
return 0;//这时VC2005发现数组超界,报错!可能有些C版本不报!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2011-03-06
展开全部
我觉得是因为你输入的字符串被看成是一个字节存储在一个单元格中
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2011-03-06
展开全部
你这的定义char a[1];有问题,你数组只定义一个元素,那还要定义数组干什么呢?
换成 char a[100];
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2011-03-06
展开全部
我怎么记得是
scanf("%s",a);
还是
printf("%s",a);
中有一个的参数应该加上&符号呢!可是我见这些都没有写那个符号~~

信息来源:黑**=吧=**安全网
只有不想学的,没有学不会的--------神马 年代
////////////////////////////////////////////////////////////////////////////////
九年悠久历史! 业界公认水平~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式