【发布时间】:2011-02-02 22:17:20
【问题描述】:
我意识到这段代码有问题。 但是,我遇到了一些奇怪的行为,我想知道是否有人可以解释一下。
示例 1:
char *foo;
scanf("%s",foo);
printf("%s",foo);
输出为:(null)。
示例 2:
int i;
char *foo;
scanf("%s",foo);
printf("%s",foo);
输出为:foo 的值!
为什么 int i 的存在会导致它“工作”?
【问题讨论】:
-
它不起作用。它似乎恰好按照您的预期做,但它是未定义的行为,因此是一个严重的错误。
-
从您发布的内容来看, foo 没有任何价值。它是指向一块未分配内存的指针。
-
我想在你自己的程序中发现这种错误会很烦人。 ;)
-
即使你确实知道它是如何“应该”工作的,使用
%s和scanf是完全不安全的,并且没有合法的使用。您不知道缓冲区需要多大。没有办法知道。这将始终是缓冲区溢出。