出于某种原因,我无法让这个工作:
void examplefunctionname(string str, ...){
...
va_start(ap, str.c_str());
我也不能做这项工作:
void examplefunctionname(string str, ...){
...
int len = str.length();
char *strlol = new char[len+1];
for(int i = 0; i < len; i++){
strlol[i] = str[i];
}
strlol[len] = 0;
va_start(ap, strlol);
但这样做:
void examplefunctionname(const char *str, ...){
...
va_start(ap, str);
有人可以告诉我如何在那里使用字符串代替const char *
吗?
当我拨打examplefunctionname("%d %d %d", 1337, 1337, 1337)
答案 0 :(得分:5)
来自文档:
va_start(va_list ap, last)
...参数last
是变量参数列表之前的最后一个参数的名称,即调用函数知道类型的最后一个参数。
您已在工作示例中正确完成此操作:va_start(ap, str)
,str
是最后一个已知参数。但在另外两个例子中,你将奇怪的东西传递给va_start
。
答案 1 :(得分:1)
va_start需要上一个参数。这意味着你必须直接传入str,无论它的类型如何。它不需要const char *,也不会为你解析字符串。
答案 2 :(得分:0)
va_start
是一个使用第二个参数作为位置的宏,因此您需要使用您给出的最后一个示例。
答案 3 :(得分:0)
void examplefunctionname(string str, ...){
...
va_start(ap, str);