c语言的问题int i; char c[5]; for(i=0;(c[i]=getchar())!='\n';i++)

如题所述

!='\n'
确实就是回车,作用就是判断你输入的字符直到你输入回车为止
数组下标越界的问题是因为C语言不会帮你检查数组的长度,所以当你使用了c[5]甚至c[6]的时候,使用的内存已经不是程序分配给你的内存的,则是由于内存单元是顺序排放的,所以后面有时候还能继续存
举个例子就是,比如你家有五间房,你的五间房和你的邻居连在一块,当你的五间房里装满东西后,你还可以在邻居的房间里放东西,但是这其实是不合法的,是有风险的,也许你的邻居哪天就把房子清空了
温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-06-07
char
c[5];
只是在内存中开辟了一段连续的区间

类型是char
长度是5
但如果你继续操作
c[n]
(n>4)
,
也是可以的,实际上就是相当于继续操作紧挨着数组后面的一段内存区;编译器只会警告,不会报错;
我刚用
IAR
FOR
AVR
做了个实验:提示下标超限
subscript
out
of
the
range;
Done.
0
error(s),
1
warning(s)
所以在编写程序时,程序员一定要注意数组的下标不要超限(尤其是用指针操作时);以免错改了其他被分配到这个地址的变量,引起错误;
例如
程序中有
char
c[5]
=
{0};
//
地址是
0x10_0x14
char
DATA
=
0x55;//
地址是
0x15
一旦你误操作
c[0]
=
c[5];//实际是将地址0x15中的值0x55赋给c[0]
而如果是
c[5]
=
0x00;//那么实际上是地址0x15中的值变了;即误改了变量DATA的值
希望能够帮到你,嘿嘿
第2个回答  2019-06-19
输出的字符是有限制的
最多10个,或者到换行符结束。
但输入的时候,必须加上回车
才能让程序获得
这个是c的一个规则
很难绕过去
相似回答