我正在尝试编写一个接受可变数量参数的函数,例如 printf,执行一些操作,然后将变量列表传递给 printf。我不确定该怎么做,因为它似乎必须将它们插入堆栈。
大概是这样
#include <stdio.h>
#include <stdarg.h>
void forward_args( const char *format , ... ){
va_list arglist;
printf( format, arglist );
}
int main (int argc, char const *argv[]){
forward_args( "%s %s\n" , "hello" , "world" ); return 0;
}
有什么想法吗?
最佳答案
不要将结果传递给 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 );
}
关于C 编程 : Forward variable argument list,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1719784/