gpt4 book ai didi

c - 带有 %g 的 sprintf 的最小缓冲区大小是多少?

转载 作者:行者123 更新时间:2023-12-04 10:32:25 25 4
gpt4 key购买 nike

问题是静态分配一个足够大的缓冲区以容纳打印的 double ,并以最大精度使用 %g 格式化。这似乎是一个很简单的任务,但我遇到了麻烦。我想出的最好的(假设要打印的数字是 x)是

char buf[1 + DBL_DIG + DBL_DIG + 1 + 1 + 1 + DBL_DIG + 1];
int len = sprintf(buf, "%.*g", DBL_DIG, x);

DBL_DIG 宏来自 float.h,显然它应该指示 double 类型的最大精度。我们需要:

  • 1 个字节表示负号
  • 足够的字节来捕获有效数字
  • 每个数字最多有一个“分隔符”字符(逗号等)
  • 1 个字节的小数点
  • “e”为 1 个字节
  • 1 字节的指数符号
  • 指数的一些字节
  • sprintf 写入的尾随 null 为 1 个字节。

我使用有效位数作为指数位数的上限。我犯了什么错误吗?有更好的解决方案吗?我应该只分配 64、128 或 256 字节并希望获得最好的结果吗?

最佳答案

您不能在编译时预先计算大小。 %g 格式化程序考虑了语言环境(对于 1000 的分隔符等)见 http://linux.die.net/man/3/sprintf有关如何安全计算大小的说明。

关于c - 带有 %g 的 sprintf 的最小缓冲区大小是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1664571/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com