大家好..有关C语言输入,输出的一个奇怪问题..

来源:百度知道 编辑:UC知道 时间:2024/07/02 10:44:56
请看下边几行代码:
main()
{
char a[5];
scanf("%s",a);
printf("%s",a);
getch();
}
这里我定义的数组长度为5,为什么我从键盘输了5个以上的字符却能全部显示出来??

1\有人说,"因为C库的scanf没有作边界检查,缓冲区溢出就可以是这么搞的".
2\还有人说,."字符串输出时候就是这样,长度不够的时候加空格,超过原样输出."

3\我说:如果真像以上所说的话,那这里定义字符数组的长度岂不没有什么意义了吗??
而且书上也说,所输入的字符应当小于定义的数组长度..却没说,如果大于了会有什么现象..??
还望前辈们指点一下吧..

这是因为你用的%s是字符串处理,它只认字符串结尾的\0而不认所谓的数组上界

当你输入字符串后回车时,就会在字符串结尾加上'\0',%s就是以这个为标志的

实际上它是按照指针动态分配的方式执行的,与数组没有直接关系,数组的常用用法只能是a[x],其他属于扩展用法