【问题标题】:C++, vsprintf working with changing number of arguments and large format stringsC++,vsprintf 处理不断变化的参数数量和大格式字符串
【发布时间】: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_listva_list args;

【问题讨论】:

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

标签: c++ printf


【解决方案1】:

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

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

或者它会遍历列表,将所有项目放在第一个说明符处?

没有。 vsprintf 如果那样做就不会是一个有用的功能。

【讨论】:

    猜你喜欢
    • 2012-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-04
    相关资源
    最近更新 更多