gpt4 book ai didi

c - 在 C 中将 double 转换为 char* 的缓冲区大小

转载 作者:太空狗 更新时间:2023-10-29 15:28:56 24 4
gpt4 key购买 nike

为了将double(或floatintlong)转换为char * 在 C 中我们可以使用

i) sprintf()

ii) 像itoa(), ftoa()

这样的函数

但是所有这些函数都需要一个缓冲区作为参数。在每种情况下缓冲区的大小应该是多少,以便可以转换最大整数或最大精度 float / double ?

最佳答案

snprintf 可用于确定大小,以 0 参数作为大小:

double x = 42;
const char fmt[] = "%f";
int size = snprintf(0, 0, fmt, x);
if(size < 0) { /* handle error */ }
char buf[size+1];
sprintf(buf, fmt, x);

C 标准需要带有 0 大小参数的 snprintf 才能工作。但请注意,一些较旧的实现不符合要求(例如,根据 man page ,如果输出被截断而不是本应写入的字符数,Glibc 直到版本 2.0.6 返回 -1)。

上面的错误检查可能没有用,唯一可能发生的错误是编码错误。

您不应在 snprintfsprintf 调用之间更改语言环境,语言环境可能会影响大小。 sprintf 可以替换为 snprintf 如果干预区域设置更改是一个问题,但你可能想通过 malloc 分配内存,然后在必要时 realloc。 [谢谢,Chux !]

Glibc下还有asprintf它自己分配缓冲区。不要忘记事后释放它。 [感谢Abligh !]

关于c - 在 C 中将 double 转换为 char* 的缓冲区大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29141851/

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