scanf 的奇怪行为

标签 c scanf

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

示例 1:

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

输出是:(null)

示例 2:

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

输出是:val of foo !

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

最佳答案

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

int i 的存在只是改变了 foo 在堆栈中的位置,因此改变了它具有的特定随机值。您不应该对这种不同的行为读入任何有意义的内容,因为它仍未定义。

关于scanf 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4880554/

相关文章:

c - fscanf 在循环中保存到同一个数组会导致空间填充数组

c - scanf() 将换行符保留在缓冲区中

javascript - 如何在没有对称密码的情况下将公钥/私钥用于短数据

c - 函数中的 For 循环产生随机数

通过scanf在C中输入char

c - 如何阻止程序将多个字符存储到 char 变量中?

c - scanf返回值不符合预期

c++ - 对 printf 使用 #define,它对速度有影响吗

c - on_exit 和 CTRL+C

c - 警告 : assignment from incompatible pointer type (Pointers and structures)