【发布时间】:2014-05-15 18:27:22
【问题描述】:
我需要将各种格式的字符串打印到文件中。我将有与每个字符串关联的整数,与每个字符串中的格式说明符相同的整数数量。大多数字符串不会有相同数量的格式说明符/整数。
所以给定一个格式字符串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通话建立args列表,这可能有助于澄清讨论。 -
我仍在研究如何准确填写 va_list。
-
这些是等价的,只要
args是通过在与省略号对应的a1,a2,a3,a4调用的函数中正确执行va_start来创建的。如果您正在考虑建立自己的va_list,请不要。 -
是否有可能有一个向量,一个变化大小,对应于那个省略号?