如果我这样做:
void printfloat(float number)
{
printf("%f", number);
}
和
void printdouble(double number)
{
printf("%f", number);
}
每个功能可以输出的最大字符数是多少?
答案 0 :(得分:3)
通过测试,使用MS Visual Studio 10,由
生成一串811sprintf(buf, "%.*f", 500, -DBL_MAX);
当然,使用更大的精度值可能会有更长的字符串。
但保留“%f”,'\ 0'输出的最大字符数为317 + 1。 所以对于便携式代码:
#include <float.h>
#include <stdio.h>
char buf[1/*'-'*/ + (DBL_MAX_10_EXP+1)/*308+1 digits*/ + 1/*'.'*/ + 6/*Default? precision*/ + 1/*\0*/];
sprintf(buf, "%f", -DBL_MAX);
函数printfloat(float number)单独的参数“number”,作为一个float并限制在float的范围内,在传递给sprintf()时被转换为double。它的最大值因此是FLT_MAX。因此'\ 0'的最大输出字符数为47 + 1。
char buf[1/*'-'*/ + (FLT_MAX_10_EXP+1)/*38+1 digits*/ + 1/*'.'*/ + 6/*Default? precision*/ + 1/*\0*/];
sprintf(buf, "%f", -FLT_MAX);
答案 1 :(得分:2)
结论:
我无法让snprintf告诉我字符串有多大,我希望尽可能保持代码与编译器无关。所以这是我提出的解决方案。
char numstr[50];
sprintf_s(numstr, "%g", *value);
m_stringRepresentation += numstr;
%g以科学计数法输出数字,这严重限制了字符数。我选择了一个足够大的缓冲区来包含任何可能输出的内容。我唯一的编译器依赖是在sprintf_s上。
答案 2 :(得分:1)
通过wc -c传送的快速测试程序显示浮动47个字符,双重317个字符。该计划:
#include <stdio.h>
#include <float.h>
int main(void) {
printf("%f", -DBL_MAX);
}
请注意,您可以使用snprintf将输出限制为n个字符。