中易网

各位大神,求解啊,定义数组c[6],我输入7个数,它输出7个数,那么6还有什么意义啊

答案:3  悬赏:20  
解决时间 2021-11-05 02:43
各位大神,求解啊,定义数组c[6],我输入7个数,它输出7个数,那么6还有什么意义啊
最佳答案
这样用是不对的,你定义个数组,却用%s,然后使用c的首地址接收数据,他不管你输入几个全部接收进去,因为对于c这个地址来讲,并不是只有6个成员,超过6个的地址在内存中也是存在的,然后你调用printf使用%s打印字符串,传递的是c的首地址,那么它是从c地址开始,直到遇到/0才结束打印,如果你的内存存在废弃的数据,那么它不止打印6个,不遇到/0他是不会结束的。。。c[6]的意义在于使用c[i],并用%c接收数据,例如:
#include
void main()
{
int i;
char c[6];

for(i=0; i<6; i++)
{
scanf("%c",&c[i]);
getchar();
printf("%c\n",c[i]);
}
return ;
}
这种情况下当你意图给c[6]这个元素传递参数,也就是把for(i=0; i<6; i++)改为for(i=0; i<7; i++)的时候,程序就会出错,因为他没有第7个元素,打印出的c[6]是乱码。。。
接评论的回答:忘了提一点,这也是为什么定义char数组时要比需要的位数多定义一位的原因,就是为了预留一位作为结束标志位。。。

处理一个20个字符的字符串,需要定义一个长度为21的字符数组,类似于这样:
#include

int main()
{
int i;
char ctl[21];

printf("Input 20 characters\n");
scanf("%s",ctl);
ctl[20] = '\0';

for(i=0; i<20; i++)
{

}

return 0;
}
全部回答
确实,c里面是没有边界检查的,这就涉及到堆,栈的具体的处理方法了,建议可以找找相应的书籍
c语言和c++是没有边界检查的,你看着结果像是对的一样,我输入7哥也行,但是,其实你的内存已经溢出了。 并不是运气每次都这么好内存溢出后你输入的值还在。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
百香果蜂蜜酱用什么质材瓶子装
西宁火车站附近有没有去湟中的车?
一个煮玉米的热量高还是一碗米饭的热量高?
乐山快递公司哪家好
成都哪些地方可以用盖网积分?
冬天瓦盆养金鱼怎么养
九个月婴儿咬牙怎么回事
GTASA车牌生成器XP系统可以用吗
电热毯可不可以反过来铺在床上用
葫芦岛在哪里可以学美甲
龙门吊电葫芦减速器本来不漏油的,工人换了一
如何杜绝三鹿奶粉类似事件的发生
武汉惠普金牌售后位置在哪里,怎么坐车? 联系
出国劳务办理那些复杂吗
请问那个牌子的刮胡刀比较好?
推荐资讯
大连市旅游景点
喜来健温热理疗床坏了如何修理
博客天气预报
红衣服黑裙子配什么颜色的鞋好看
从燕郊火车站到鸟巢怎么走
从延庆县康庄镇西红寺村到延庆县大庄科乡怎么
给中学老师的一封信400字
淘宝店主怎么在淘宝软件平台找货源
阿姨叔叔爸爸英文歌
吉祥数码手机专卖店 卖红米note是不是骗人的
请问那种装在墙上内部接着宽带线的插座盒叫什
怀孕了要多久才能用试纸测出来啊?
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?