不要将结果传递给printf
。将它们传递给vprintf
。 vprintf
专门存在处理传递参数va_list
。从Linux手册页:
#include <stdio.h>
int printf(const char *format, ...);
int fprintf(FILE *stream, const char *format, ...);
int sprintf(char *str, const char *format, ...);
int snprintf(char *str, size_t size, const char *format, ...);
#include <stdarg.h>
int vprintf(const char *format, va_list ap);
int vfprintf(FILE *stream, const char *format, va_list ap);
int vsprintf(char *str, const char *format, va_list ap);
int vsnprintf(char *str, size_t size, const char *format, va_list ap);
注意后者如何明确采取va_list
参数,如你在参数列表中以...
在函数内声明的人。所以你的功能将被声明为这样:
void forward_args(const char *format , ...){
va_list arglist;
va_start(arglist, format);
vprintf(format, arglist);
va_end(arglist);
}
也许你和约翰在同一班? http://stackoverflow.com/questions/1714550/how-can-one-variable-args-function-call-another – 2009-11-12 04:00:45
可能的重复[在C中转发一个可变参数函数的调用](http://stackoverflow.com/questions/150543/forward-an-invocation-of-a-variadic-function-in-c) – dmckee 2013-03-28 15:33:45