【发布时间】:2020-04-03 12:02:18
【问题描述】:
最近我开始对stdarg.h 函数有了一些了解,因为我想拥有类似于printf 的东西,但我不想将其写入控制台,而是想将其作为字符串返回。
到目前为止,这是我想出的:
char *write(const char *format, ...)
{
// init
va_list arg;
char *string;
va_start (arg, format);
vsprintf (string, format, arg);
// done
va_end (arg);
return string;
}
现在的问题是,string 没有保留内存,因此我需要帮助来解决此功能,因为我还没有找到任何解决方案。
提前致谢
【问题讨论】:
-
一种选择是将
vsnprintf()与 n=0 一起使用,因为这将返回已写入的字符数(实际上不写入任何内容)。然后你可以根据它分配一个缓冲区,然后再次调用 vsnprintf,但使用正确的 n -
然后您可以根据它分配一个缓冲区,:请注意,您需要为 NUL 终止符分配一个比
vsnprintf返回的缓冲区更多的内容。 -
这就是为什么我写“基于”@Jabberwocky ;-)。我希望 OP 在盲目实施任何东西之前实际阅读 vsnprintf 文档。但是,是的,那里有一个陷阱,因为 n 应该是缓冲区的大小(包括 '\0'),而返回值是没有 '\0' 的字符数
-
@FelixG 这是人们在这里询问的常见问题之一
-
@klutt 他想要的函数返回指向生成的字符串的指针