scanf的好奇行为

时间:2011-02-02 22:17:21

标签: c scanf

我意识到这段代码有问题。 然而,我遇到了一些奇怪的行为,我想知道是否有人可以解释。

示例1:

   char *foo;
   scanf("%s",foo);
   printf("%s",foo);

输出为:(null)

示例2:

  int i;
  char *foo;
  scanf("%s",foo);
  printf("%s",foo);

输出为: foo的val

为什么 int i 的存在会导致“工作”?

1 个答案:

答案 0 :(得分:6)

foo是一个指针,但你没有将它设置为指向你已分配的任何内存,所以它只是在启动时有一个随机值,因此指向一些随机部分记忆。因此,任何事情都可能发生(即未定义的行为)。

int i的存在只会改变堆栈上foo的位置,从而改变它所具有的特定随机值。你不应该在这种不同的行为中阅读任何有意义的内容,因为它仍未定义。