C数组问题
一段很简单的程序:
#include <stdio.h>
main()
{
char name[3];
puts("Input your name:");
scanf("%s",name);
printf("%s",name);
}
编译后运行:
$ ./numbergroup.exe
Input your name:
fengyunsen
fengyunsen
突然觉得好奇怪,明明定义了char name[3],我输入的字符串都超过3个了,但是怎么没有报错?
后面我还测试了一下:
#include <stdio.h>
main()
{
char name[3];
printf("%s",name);
puts("Input your name:");
scanf("%s",name);
printf("%s",name);
if (name[9] == 'n')
{
printf("\nTrue!");
}
}
运行结果:
$ ./numbergroup.exe
Input your name:
fengyunsen
fengyunsen
True!
这下有点迷糊了,这个char name[3] 到底有没有限制的?请教各路大神 c
[解决办法]
char name[3];
这个数组是线性存储的 它会随机找零散的线性内存区域 满足你的name[3]空间
如果name[4]后面的内存区域没与人在用 或者不是系统保护的地方 你是可以访问到的
但不代表你的程序每次运行都可以访问到 有可能会出段错误
比如你输入100多个j 你看看 必会出段错误
[解决办法]