C语言,数组问题

来源:百度知道 编辑:UC知道 时间:2024/05/21 13:12:06
为什么我输入:hello,world!
输出结果是:hello,world!
我定义的数组长度为5,为什么超出5个字符也能输出阿?

main()
{
char name[5];
scanf("%s",name);
printf("%s",name);
}

因为字符数组name代表的是一个地址,就是name[0]的地址,而在用%s格式输出时,系统主要是判定内存序列中的'\0',虽然超出了5个字符,但是在读入的时候是整句读入的,所以name[4]后面的内存地址也被覆盖了,总的来说,这是因为c语言的自由度很大,不会对下越界进行检查。
所以敬告初学者,一定要自己检查清楚,以后如果在大程序中出现这种问题,后面的数据被覆盖,那后果就严重了!!

可是可以输出,但是会出错啊

scanf 输入的长度大于数组的长度,都发生溢出了,大于数组长度的数据就会保

存在未知区域,可能将代码段的数据也给覆盖了

输出函数是以'\0'为结束标志的,当输出数组的时候,字符输出完后可能有不匹配的字符东东发生错误

危险操作

一楼说的对,你已经覆盖了一部分保留的局部变量缓冲区,你试试在多输入几个字符看看,保证出错。

可能设计到一个数据溢出问题,你可以利用调试,插入个断点看看数据到底是什么样的