printf()和格式说明符链接

时间:2016-06-26 10:10:35

标签: c printf format-specifiers

我非常了解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()函数和格式说明符之间通过文件处理或指针。那么任何人现在终于可以告诉它可能是什么了吗?

注意:-result可能因IDE而异,但对于每个系统上的编译器都是一样的,因为我也在codeblocks IDE上尝试了这个。

2 个答案:

答案 0 :(得分:4)

  

现在终于有人能说出它可能是什么了吗?

来自C11 Standard (draft) for the library function fprintf()

  

<强> 7.21.6.1/2

     

[...]

     

如果格式的参数不足,则行为为   未定义。

代码调用未定义的行为可能发生任何

答案 1 :(得分:0)

  

输出: - printf:浮点格式未链接异常程序终止。

除非在用户代码中检测到浮点代码,否则Turbo C和某些编译器不会在浮点支持中链接。 "%f %f %f"需要FP支持才能工作,但编译器无法在 compile 时识别它。相反,程序在运行时失败。

添加FP代码并摆脱对printf();

的其他误用
#include <stdio.h>
#include <math.h>
int main() {
  clrscr();
  double a = sqrt(2.0):
  printf("%f %f %f\n",a,a,a);
  getch();
}