C++ C++;,vsprintf处理更改参数数量和大格式字符串

C++ C++;,vsprintf处理更改参数数量和大格式字符串,c++,printf,C++,Printf,我需要将各种格式的字符串打印到文件中。我将有与每个字符串关联的整数,每个字符串中的整数数量与格式说明符数量相同。大多数字符串的格式说明符/整型数不相同 因此,给定一个格式字符串,沿着blah-blah-blah%d行,还有其他的blah%hd-blah-blah-blah%02hd-blah%d 一个包含四个整数的参数列表需要放入这个语句中,vsprintf将并行地遍历参数列表和format语句,将第一个列表项放在第一个说明符,第二个列表项放在第二个说明符,依此类推。或者它会在列表中将所有项目放

我需要将各种格式的字符串打印到文件中。我将有与每个字符串关联的整数,每个字符串中的整数数量与格式说明符数量相同。大多数字符串的格式说明符/整型数不相同

因此,给定一个格式字符串,沿着
blah-blah-blah%d行,还有其他的blah%hd-blah-blah-blah%02hd-blah%d
一个包含四个整数的参数列表需要放入这个语句中,
vsprintf
将并行地遍历参数列表和format语句,将第一个列表项放在第一个说明符,第二个列表项放在第二个说明符,依此类推。或者它会在列表中将所有项目放在第一个说明符处吗

换句话说,以下两种说法是否等价

sprintf(buffer,"blah blah blah %d something else blah %hd blah blah blah %02hd blah %d",a1,a2,a3,a4)

vsprintf(buffer,"blah blah blah %d something else blah %hd blah blah blah %02hd blah %d", args)
vsprintf
args
中将是一个
va_列表
<代码>变量列表参数

vsprintf
并行地处理参数列表和format语句,将第一个列表项放在第一个说明符处,将第二个列表项放在第二个说明符处,[等等]

是的,这就是它将产生的结果

或者它会在列表中将所有项目放在第一个说明符处吗


不。
vsprintf
如果这样做,将不会是一个有用的函数。

如果您展示如何(或将如何)为
vsprintf
调用构建
args
列表,这可能有助于澄清讨论。我仍在研究如何准确填写va_列表。这些都是等效的,只要
args
是通过在使用与省略号对应的
a1、a2、a3、a4调用的函数中正确执行
va_start
创建的。如果您正在考虑构建自己的
va_列表
,那么不要这样做。是否有可能让一个大小变化的向量与省略号相对应?