我需要多大的缓冲区?

Aug*_*rom 5 c printf c89

对于存储在x中的double值,缓冲区需要在下面的函数调用中有多大?

sprintf(buffer, "%.*g", DBL_DIG, x);
Run Code Online (Sandbox Code Playgroud)

Ser*_*sta 5

最糟糕的情况是:

  • 一个减去-数字,如果是负数
  • 一个小数点 .
  • DBL_DIG十进制数字
  • 指数部分不应该大于e+999(*)
  • 终止null

所以缓冲区的大小应该是DBL_DIG + 8.

(*)根据[IEEE浮点数]上的维基百科页面,双精度的指数部分最多为2 1023 <10 308.所以指数的十进制表示最多需要3位数.

当然上面的内容只对IEEE754兼容的浮点实现有意义(感谢Basile Starynkevitch注意到)