2
void myPrintf(const char* format, ...) {
    // some code
    va_list vl;
    printf(format, vl);
}

int main() {
    myPrintf("%d\n", 78);
}

在这段代码中,我尝试将参数从省略号传递到printf. 它编译但打印垃圾而不是78。正确的做法是什么?

4

3 回答 3

7

您需要执行以下操作:

void myPrintf(const char *format, ...) {
    va_list vl;
    va_start(vl, format);
    vprintf(format, vl);
    va_end(vl);
}

请注意使用vprintf代替printf

于 2013-09-10T10:07:09.560 回答
1

两个问题:

  1. 第一个是你不初始化vl,使用va_start它。之后别忘了使用va_end

  2. 另一个问题是printf不需要va_list争论。为此使用vprintf

于 2013-09-10T10:05:36.437 回答
0

首先初始化vl

va_start(vl,1); //No. of arguments =1

然后从中int取出

printf(format, va_arg(vl,int));

于 2013-09-10T10:07:05.970 回答