1

printf("%d");orprintf("%p");语句的输出是什么?

当然我知道我应该传递参数,因为 printf 期待一个,但假设我将把这个留空会发生什么?

我知道这将打印从堆栈中读取的一些值(从应该放置函数参数的位置)。假设我正在运行 Linux 机器,我可以期望这将是一些有效值(例如函数返回地址)吗?

4

5 回答 5

6

这只是未定义的行为。什么事情都可能发生。不可能给出更准确的答案。

细节取决于printf库是如何实现的,以及变量参数是如何被编译器实现的。查看库的源代码和/或生成的程序集,以了解您的平台上发生了什么。

于 2012-10-24T11:58:04.317 回答
2

这会调用未定义的行为。就其本质而言,这意味着您无法假设会发生什么。

于 2012-10-24T11:57:54.927 回答
1

这会引发不确定的行为。您可能会打印出随机整数或崩溃或...

于 2012-10-24T11:55:42.210 回答
1

未定义的行为。这意味着您的程序可能会崩溃。

(C99,7.19.6.1p2)“如果格式的参数不足,则行为未定义。”

于 2012-10-24T12:20:03.910 回答
0

我可以期望这将是一些有效的价值吗?: 不。

于 2012-10-24T11:59:47.333 回答