将一个va_list作为参数传递给另一个va_list

8
我正在使用fastcgi库创建一个应用程序,他们的打印方法有点冗长。我试图在自己的方法中包装他们的fprintf函数:
我想把
FCGX_FPrintF(out, char* fmt, ...);
变成
write(char* strFormat, ...);
我找到了va_list的神奇之处,但找不到一种简单的方法将va_list值传递到他们的fprintf函数中。有没有办法做到这一点?我知道vsprintf和vprintf存在,所以它肯定比我想象的要难。
如果一切都失败了,我只会重载一个write函数。

如果有帮助的话,这是库的头文件 http://www.fastcgi.com/devkit/include/fcgiapp.h - RandomInsano
2个回答

14

你需要在Fast CGI库中找到vfprintf()的类比。很有可能存在一个;实现FCGX_FPrintF()的简单方法是:

void FCGX_FPrintF(FILE *out, char *fmt, ...)
{
    va_list args;
    va_start(args, fmt);
    FCGX_VFPrintF(out, fmt, args);
    va_end(args);
}
因此,该函数存在的可能性很高;您需要检查它是否被正式公开。
Fast CGI网站快速访问揭示了在fgciapp.h头文件中声明的函数使用FCGX前缀,而该头文件则包含:
/*
 *----------------------------------------------------------------------
 *
 * FCGX_FPrintF, FCGX_VFPrintF --
 *
 *      Performs printf-style output formatting and writes the results
 *      to the output stream.
 *
 * Results:
 *      number of bytes written for normal return,
 *      EOF (-1) if an error occurred.
 *
 *----------------------------------------------------------------------
 */
DLLAPI int FCGX_FPrintF(FCGX_Stream *stream, const char *format, ...);

DLLAPI int FCGX_VFPrintF(FCGX_Stream *stream, const char *format, va_list arg);

所以,这个函数的接口已经完成了。


1

我不相信有任何一种平台无关的方法可以做到这一点。 我可能会使用vsprintf自己格式化字符串,然后将其发送到打印函数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接