【发布时间】:2016-06-26 10:10:35
【问题描述】:
我非常了解 printf() 和格式说明符的工作原理
注意:- 我使用的是 Turbo c/c++ 编译器,你知道 gcc、g++ 等要好得多,但问题仍然存在
代码:-
void main()
{
clrscr();
printf("%d %d %d");
getch();
}
输出:- 0 344 0
现在,
代码:-
void main()
{
clrscr();
printf("%f %f %f");
getch();
}
输出:- printf:浮点格式未链接 程序异常终止。
现在,还请注意,我已经在大约 200 个系统上尝试过这个。
问题:-我相信输出中显示的那些格式说明符编号并不是垃圾,因为每个系统都获得相同的结果,它们是 printf() 函数和格式说明符之间通过文件处理或指针。那么现在有人能最终说出它可能是什么吗?
注意:-结果可能因 IDE 不同而不同,但对于每个系统上的编译器都是相同的,因为我也在 codeblocks IDE 上尝试过。
【问题讨论】:
-
“我相信那些显示在输出上的格式说明符数字不是垃圾” - 你正在调用未定义的行为。信念是你唯一可以为你做的事情,因为其他一切都已经消失了。
-
这是未定义的行为。您正在使用需要额外参数的格式说明符,但您没有提供它们。所以你得到了未指定的垃圾。您还错误地声明了
main。它返回一个int,需要这样声明。 -
就像我说的,我已经在一个大号上测试过这个。系统所以是的,我相信导致两个编译器在所有系统上的结果都是相同的,turbo c 编译器实际上是由 Dennis Ritchie 创建并由 borland 的人编辑的 borland c 编译器,根据 ANSI C main 可以具有 void 返回类型。
-
您确定您的 Turbo C 编译器支持浮点吗?或者也许需要一个特殊的选项来打开这个支持?阅读此c-faq.com/fp/fpnotlinked.html
-
这个问题完全没意思,应该关闭。如果你真的想看看你的随机堆栈访问在你的平台上做了什么,请查看汇编代码并弄清楚。这是一种乏味的浪费时间,但一点也不难。所以就去做吧。
标签: c printf format-specifiers