簡體   English   中英

將一個 va_list 作為參數傳遞給另一個

[英]Passing one va_list as a parameter to another

我正在使用 fastcgi 庫創建一個應用程序,他們的打印方法有點冗長。 我試圖用我自己的方法包裝他們的 fprintf 函數:

我想轉

FCGX_FPrintF(out, char* fmt, ...);

進入

寫(字符* strFormat,...);

我發現了 va_list 的神奇之處,但找不到一種簡單的方法將 va_list 值傳遞到它們的 fprintf 函數中。 有沒有辦法做到這一點? 我知道 vsprintf 和 vprintf 存在所以它一定比我想象的要難。

如果所有其他方法都失敗了,我將重載一個寫入函數

您必須在 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);

至此,接口功能就完成了。

我不相信有任何方法可以以獨立於平台的方式做到這一點。 我可能會使用 vsprintf 自己格式化字符串,然后將其發送到打印功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM