C++ 如何使用数组调用printf?
我正在尝试创建一个简单的模板引擎,一个引擎 它接受一个模式和一些变量,并生成一个字符串输出。 这就是想法:C++ 如何使用数组调用printf?,c++,printf,variadic-functions,C++,Printf,Variadic Functions,我正在尝试创建一个简单的模板引擎,一个引擎 它接受一个模式和一些变量,并生成一个字符串输出。 这就是想法: const char * pattern = ReadPattern(); // pattern is like "%s in %s ft" vector<const char *> variable = ReadVariable(); // variable is like "6", "5". const char*pattern=ReadPattern();//模式类似于
const char * pattern = ReadPattern(); // pattern is like "%s in %s ft"
vector<const char *> variable = ReadVariable(); // variable is like "6", "5".
const char*pattern=ReadPattern();//模式类似于“%s”(在%s ft中)
向量变量=ReadVariable();//变量类似于“6”、“5”。
如何使用它们调用printf函数?
理想情况下,我可以执行printf(模式,变量[0],变量[1])代码>
但因为模式和变量直到运行时才知道,
我甚至不知道变量的数目。
据我所知,以编程方式构建va_列表是不可移植的
请帮忙,谢谢 如果对向量
元素的数量有一个上限,那么它是相对直接的。假设上限为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;
}
int printf_向量(常量字符*p,向量v){
开关(v.size()){
案例0:返回printf(p);
案例1:返回printf(p,v[0]);
案例2:返回printf(p,v[0],v[1]);
案例3:返回printf(p,v[0],v[1],v[2]);
默认:中断;
}
返回-大;
}
如果没有上限,那么。但是“填充-a-va-list”的最佳答案是“这是个坏主意…”在运行时为printf()生成模式很可能是个坏主意。这通常会导致安全问题。从理论上看,您可以查看代码的汇编输出,并了解如何编写内联汇编循环以将向量元素推送到堆栈上并调用printf
。