C++,vsprintf 处理不断变化的参数数量和大幅面字符串

C++, vsprintf working with changing number of arguments and large format strings

本文关键字:数数 字符串 参数 vsprintf 处理 变化 C++      更新时间:2023-10-16

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

所以给定一个格式字符串,沿着 blah blah blah %d something else blah %hd blah blah blah %02hd blah %d而包含需要进入此语句的四个整数的参数列表vsprintf并行地通过参数列表和格式语句,将第一个列表项放在第一个说明符上,第二个项放在第二个说明符上,依此类推。还是会通过列表将所有项目放在第一个说明符上?

换句话说,以下两个语句是否等效?

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_list. va_list args; .

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

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

还是会通过列表将所有项目放在第一个说明符上?

不。 如果这样做,vsprintf将不是一个有用的功能。