gpt4 book ai didi

c - %g 浮点表示的最大字符串长度是多少?

转载 作者:行者123 更新时间:2023-12-03 07:50:46 25 4
gpt4 key购买 nike

堆栈分配的字符串需要有多大才能以 %g 格式存储任何 float/double?

int main()
{
float f;
double d;

char f_str[ ?? ];
char d_str[ ?? ];

sprintf(f_str, "%g", f);
sprintf(d_str, "%lg", d);
}

编辑:

我希望在编译时知道字符串大小,这样我就不会依赖堆分配或 VLA

最佳答案

这取决于实际的浮点格式和当前区域设置,因为某些字符(例如小数点字符)可能需要几个字节。例如,如果 double 对应于 IEEE 754 binary64 格式(也称为 double ),则在 C 语言环境下最大字符串长度(以字节数表示)为 13,但实际上可能为 14 (我什至不认为 C 标准有限制)。

示例:

#include <stdio.h>
#include <float.h>
#include <string.h>
#include <locale.h>

static void f (void)
{
char s[256];
double x = -DBL_MAX;
printf ("%g\n", x);
sprintf (s, "%g", x);
printf ("%zu\n", strlen (s));
}

int main (void)
{
f ();
setlocale (LC_ALL, "ps_AF");
f ();
return 0;
}

在我的 Debian Linux 机器上(启用了所有语言环境),我得到:

-1.79769e+308
13
-1٫79769e+308
14

14 是由于 ps_AF 区域设置(基于 UTF-8)中用于小数点字符的 U+066B 阿拉伯十进制分隔符所致,编码为 D9 AB。

答案与long double类似,但您需要知道相关格式的最小和最大指数。

关于c - %g 浮点表示的最大字符串长度是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77168631/

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