避免printf精度限制

时间:2014-05-02 06:37:00

标签: c printf

这是一个非常简单的代码

#include <stdio.h>

void main()
{
    printf( "\n" );
    printf( "%.512x", 0xFFFFFFFF );
    printf( "\n" );
}

问题是 - 我需要一个大于512的精度(打印超过512个符号)。但看起来有一个限制。如果我用任何更大的值替换512 - 输出结果不会改变。

我使用Visual Studio 2008和Windows XP。

有没有办法避免这种限制?

2 个答案:

答案 0 :(得分:2)

原始ANSI C(C.89)标准仅声明:

  

任何转换产生的最大字符数的最小值应为509。

更高版本(C.99和C.11)将此扩展为4095字节。因此,您的编译器似乎符合C.89。

作为一种解决方法,您可以在0之前打印出您想要的F个数,也许是字符串。

char zeros[1000];
memset(zeros, '0', sizeof(zeros));
zeros[sizeof(zeros)-1] = '\0';

printf("\n%s%x\n", zeros, 0xFFFFFFFF);

答案 1 :(得分:0)

您可以将其拆分为两个或多个部分(每个部分短于512个符号),例如使用模运算符。拆分后,您可以使用两个printf() - 命令打印数字而不受限制。