c语言在运行时不进行边界检查,你用scanf加参数%s来输入,它会读一个字符串进去(遇到回车等特殊字符就结束输入,并在最后补'\0'),至于c是否能容纳这么多,这是由编程者自己来保证c的大小要足够的。
所以你的c越界,只能说明是程序错误。这时候正好c[1]后面可以用,所以输出4个字符没有出问题,如果遇到c[1]后面不可用的情况,而你越界了,这个程序将会崩溃。
1、
为什么输入a
b
c(中间有空格)只能输出a了,怎么解决呢?
--如果碰到空格就认为碰到了第二个格式化的参数,例如:scanf("%d%d",&a,&b);
输入“2
3
4”,则a=2,b=3
2、输入连续多个a(大于20个),为什么没有溢出?
--由于程序太小,现在的内存太大,而且程序执行太短,此问题就变成了概率问题了
(1)
scanf函数就是冲缓存里面取字符串,遇到空格或换行符结束
解决方法就是:使用gets(str);
一次性读取缓存里面的字符串
(2)
你开辟的内存空间就20个char,就只能存储20个char了
1.
scanf("%s",str);
改为
fgets(str,
20,
stdin)
2.
已经写倒别的内存区了,只是在特定状态下没有发作而已