对 sprintf 可变参数使用一个指针

Use one pointer for sprintf variadic argument

本文关键字:一个 指针 sprintf 变参 参数      更新时间:2023-10-16

我正在编写一个函数,它接受一个可变参数列表并从中生成一个格式化的字符串。问题是,我使用 sprintf 来创建字符串,我需要在编程时明确列出所有参数

sprintf(string, format, a0, a1, a2, ...);

然而,关于 cpp偏好 sprintf 的描述说,那......

。(附加参数) 根据格式字符串,函数可能需要一系列附加参数,每个参数都包含一个用于替换的值 格式字符串中的格式说明符(或指向存储位置的指针,表示 n)。

我的理解是,我可以将所有数据存储到指针位置并将指针交给 sprintf。

int arr[X];
arr[0] = a0;
...
sprintf(string, format, &arr);

尝试此操作会导致意外行为。只有数字被写入字符串。

它真的以这种方式工作吗,是否有更好的解决方案?

我的第一次尝试是将每个可变参数单独添加到字符串中,但这产生了很多对 sprintf 的调用,这是我想要避免的。

是否可以将可变参数列表从一个函数传递到另一个函数?

好的...为什么我没有早点发现这个... 我的解决方案是使用vsnprintf而不是sprintf。这样就可以将va_list传递给格式化的字符串函数,并且它是安全的。

如何将可变数量的参数传递给printf/sprintf