0
#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 溢出时在 test 中声明变量的方式来看,它不应该先影响 b 然后影响 a 吗?

4

2 回答 2

1

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

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

在这里您可以查看文档:

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

于 2013-06-14T22:15:42.397 回答
0

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

于 2013-06-14T22:18:40.523 回答