第1个回答 2019-02-06
char name[5]; 声明 变量 name 是一个 char 型数组,它有5个元素,可以输出:
for (i=0;i<5;i++) printf("%c",name[i]);
这个字符组最多能接收5个字符。超过了会怎么样呢?
输入语句 scanf("%s",name); 是按 name 数组 首地址的方法读入一个字符串,遇到 换行符时,从键盘拍入的内容进入 键盘输入缓冲区,并转换为一串 ASCII 字节 数值,放入从 name 数组 首地址 起始 的 一串地址。 如果 地址 &name[5], &name[6]... 没有被 其它变量占据和使用,那么 name字符串 可以使用它们 -- 这时,属于“超界占用”。
超过了会怎么样呢 ? 会 超界占用,若 超界部分 已是 别的变量 使用区,超界区的字符数值就不可靠了。当程序很小时,问题不大,程序大时,就有问题了。
通常,声明为 char name[5]; 作为字符串使用时,要自己注意,使用4个单元,最后一个单元留给 字符串结束符 '\0', 作为字符数组使用时,用到5个单元。
编译器超过了一两个也显示出来 -- 程序很小时,是可以显示的。
新的编译器,改用 scanf_s()函数,为的是 防止超界使用。