gpt4 book ai didi

c - 如何计算 sprintf 将生成的输出长度?

转载 作者:太空狗 更新时间:2023-10-29 16:31:34 26 4
gpt4 key购买 nike

目标:将数据序列化为 JSON。

问题:我无法事先知道整数有多少个字符。

我认为一个很好的方法是使用 sprintf()

size_t length = sprintf(no_buff, "{data:%d}",12312);
char *buff = malloc(length);
snprintf(buff, length, "{data:%d}",12312);
//buff is passed on ...

当然我可以使用像 char a[256] 这样的堆栈变量来代替 no_buff

问题:但是在 C 中是否有像 unix /dev/null 这样的一次性写入的实用程序?像这样:

#define FORGET_ABOUT_THIS ...
size_t length = sprintf(FORGET_ABOUT_THIS, "{data:%d}",12312);

附注我知道我也可以通过日志获取整数的长度,但这种方式似乎更好。

最佳答案

因为 C 是简单的语言,所以没有“一次性缓冲区”这样的东西——所有的内存管理都在程序员的肩上(有针对这些的 GNU C 编译器扩展,但它们不是标准的)。

cant know beforehand how many chars long the integer is.

您的问题有更简单的解决方案。 snprintf 知道了!

在 C99 兼容平台上调用 snprintf 并以 NULL 作为第一个参数:

ssize_t bufsz = snprintf(NULL, 0, "{data:%d}",12312);
char* buf = malloc(bufsz + 1);
snprintf(buf, bufsz + 1, "{data:%d}",12312);

...

free(buf);

在较旧的 Visual Studio 版本(具有非 C99 兼容的 CRT)中,使用 _scprintf 而不是 snprintf(NULL, ...) 调用。

关于c - 如何计算 sprintf 将生成的输出长度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29087129/

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