scanf的好奇行为

1 c scanf

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

例1:

   char *foo;
   scanf("%s",foo);
   printf("%s",foo);
Run Code Online (Sandbox Code Playgroud)

输出为:(null).

例2:

  int i;
  char *foo;
  scanf("%s",foo);
  printf("%s",foo);
Run Code Online (Sandbox Code Playgroud)

输出是:foo的val!

为什么int i的存在会导致这种"工作"?

Oli*_*rth 6

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

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