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