You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于同一可变参数列表多次调用vsprintf实现自定义格式化函数?

实现自定义多格式对的printf函数

我想要实现一个可以按如下方式调用的函数:

my_printf(int unimportant,
          "%-10s", "a string",
          "%5.1f", 1.23,
          format_string, value_to_format,
          /* 可能存在更多此类格式-值对 */
          (char *) NULL);

已知前提:每个格式字符串最多包含一个%转义序列,目标是借助sprintf系列函数格式化所有值,最终生成类似"a string , 1.2, …"的拼接结果。

我试过几种方法,但都走不通:

  • 直接在循环里调用vsprintf:会破坏可变参数列表指针ap,调用后无法保证ap的有效性
  • 用va_copy复制ap避免破坏原指针:但没法确定如何把原ap移动到下一组格式-值对的位置,这需要解析格式字符串来判断参数类型
  • 改用sprintf:还是得解析格式字符串,为每种参数类型写switch分支

我想知道这个问题的常规解决方案,而且需要可移植的实现,不能依赖GCC的parse_printf_format这类非标准扩展。可选的解决方向包括:

  1. 被我忽略的关键点
  2. 不存在可行的可移植方案
  3. 必须解析格式字符串
  4. 预处理器技巧
  5. 经典参考代码
  6. 调整调用语法
  7. 其他方案

感谢任何建议。

内容的提问来源于stack exchange,提问作者Mark Dominus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 13:42:11