【问题标题】:How to call printf with an array?如何用数组调用 printf?
【发布时间】:2013-06-12 22:29:44
【问题描述】:

我正在尝试创建一个简单的模板引擎,一个引擎 它接受一个模式和一些变量并产生一个字符串输出。 思路是这样的:

const char * pattern = ReadPattern(); // pattern is like "%s in %s ft"
vector<const char *> variable = ReadVariable(); // variable is like "6", "5".

如何使用它们调用 printf 函数? 理想情况下我可以做到printf(pattern, variable[0], variable[1]); 但是因为模式和变量直到运行时才知道, 我什至不知道变量的数量。 据我了解,以编程方式构建 va_list 是不可移植的。

请帮忙,谢谢!

【问题讨论】:

标签: c++ printf variadic-functions


【解决方案1】:

如果您对vector 元素的数量有上限,则相对简单。假设上限为 3:

int printf_vector(const char *p, vector<const char *> v) {
    switch (v.size()) {
    case 0: return printf(p);
    case 1: return printf(p, v[0]);
    case 2: return printf(p, v[0], v[1]);
    case 3: return printf(p, v[0], v[1], v[2]);
    default: break;
    }
    return -E2BIG;
}

如果你没有上限,那么this is a bad idea

【讨论】:

  • 理论上,您可以查看代码的汇编输出,并弄清楚如何编写内联汇编循环将向量元素压入堆栈并调用printf
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-28
  • 2012-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多