缓冲区溢出错误的变量值

时间:2013-06-14 22:13:02

标签: c stack buffer-overflow

#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?

2 个答案:

答案 0 :(得分:1)

ab变量不一定与变量buf连续。因此,变量buf的溢出与ab的可能值无关。行为将是未定义的。

但是,重要的是要提到 C 标准会将所有数组(例如buf)存储在连续的内存位置。

Here您可以查看文档:

  

数组是一系列连续放置的相同类型的元素   可以通过添加单独引用的内存位置   索引到唯一标识符。

答案 1 :(得分:0)

未定义未定义的行为。关于函数中不同变量的相对位置,语言标准中没有任何内容,并且肯定无法保证缓冲区溢出情况会发生什么。