我意识到这段代码有问题。 但是,我遇到了一些奇怪的行为,我想知道是否有人可以解释一下。
示例 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/