我意识到这段代码有问题。 然而,我遇到了一些奇怪的行为,我想知道是否有人可以解释。
示例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 的存在会导致“工作”?
答案 0 :(得分:6)
foo
是一个指针,但你没有将它设置为指向你已分配的任何内存,所以它只是在启动时有一个随机值,因此指向一些随机部分记忆。因此,任何事情都可能发生(即未定义的行为)。
int i
的存在只会改变堆栈上foo
的位置,从而改变它所具有的特定随机值。你不应该在这种不同的行为中阅读任何有意义的内容,因为它仍未定义。