各位大神,求解啊,定义数组c[6],我输入7个数,它输出7个数,那么6还有什么意义啊
答案:3 悬赏:20 手机版
解决时间 2021-03-17 09:52
- 提问者网友:欲望失宠
- 2021-03-16 16:47
各位大神,求解啊,定义数组c[6],我输入7个数,它输出7个数,那么6还有什么意义啊
最佳答案
- 五星知识达人网友:廢物販賣機
- 2021-03-16 17:00
这样用是不对的,你定义个数组,却用%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;
}
#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;
}
全部回答
- 1楼网友:毛毛
- 2021-03-16 19:13
确实,c里面是没有边界检查的,这就涉及到堆,栈的具体的处理方法了,建议可以找找相应的书籍
- 2楼网友:撞了怀
- 2021-03-16 18:31
c语言和c++是没有边界检查的,你看着结果像是对的一样,我输入7哥也行,但是,其实你的内存已经溢出了。 并不是运气每次都这么好内存溢出后你输入的值还在。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯