我今天遇到了一个奇怪的问题printf()
。但是即使分析了它,我也找不到它的答案。因此在这里分享。我试过这三种printf()
说法:
printf("\nValue of this division is %f", (double)873/(double)65);
它按预期打印正确的输出。
printf("\nSome message with an integer here %d followed by floats %f, %f, %f", 2013, 987/432, 873/65, 983/81);
给了我错误的值(因为我没有将它们加倍?)
printf("\nSome message with an integer here %d followed by floats %f, %f, %f and now string at end: %s", 2013, 987/432, 873/65, 983/81, "Some trial string here");
printf()
在这里坠毁!这向我提出了两个问题:
我在 MSDN 中看到了“FormatOutput(LPCSTR formatstring, ...)”示例,他们在其中分配固定宽度的目标缓冲区,然后
vsnprintf()
用它调用。我相信printf()
沿着同一条路线工作。但我没有找到任何内部缓冲区大小为printf()
. 如果它动态分配内存,那么它如何计算缓冲区大小?printf()
在上面的行上崩溃是因为vsnprintf()
那里也崩溃了(是的,我尝试了使用上述参数FormatOutput
给出的示例代码)。vsnprintf()
但是为什么最终会崩溃呢?