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

时间:2017-03-17 06:51:16

标签: c++ printf

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

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

cppreference然而,sprintf的描述说明了......

  

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

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

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

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

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

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

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

1 个答案:

答案 0 :(得分:1)

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

How to pass variable number of arguments to printf/sprintf