#include <stdio.h>
#include <stdlib.h>
int test(void)
{
int a=0,b=0;
char buf[4];
gets(buf);
printf("a:%d b:%d",a,b);
}
int main()
{
test();
return 0;
}
问题是为什么输入:aaaaa a变为97而不是b?从buf溢出后的变量被声明的方式来说,不应该影响第一个b然后是a?
答案 0 :(得分:1)
a
和b
变量不一定与变量buf
连续。因此,变量buf
的溢出与a
和b
的可能值无关。行为将是未定义的。
但是,重要的是要提到 C 标准会将所有数组(例如buf)存储在连续的内存位置。
Here您可以查看文档:
数组是一系列连续放置的相同类型的元素 可以通过添加单独引用的内存位置 索引到唯一标识符。
答案 1 :(得分:0)
未定义未定义的行为。关于函数中不同变量的相对位置,语言标准中没有任何内容,并且肯定无法保证缓冲区溢出情况会发生什么。