有時候不僅需要處理變長參數,還需要將變長參數作爲參數,傳遞給其他函數。
先上一段代碼,定義一個函數:
/*函數說明write_log, 向文件中寫字符串
*@param pf 文件指針
*@param format 格式字符串(與printf格式相同)
*@param ... 可變長參數
*/
void write_log(FILE* pf, const char* format, ...)
{
char szTemp[1024];
va_list v;
va_start(v, format);
vsprintf(szTemp, format, v);
va_end(v);
fwrite(szTemp, strlen(szTemp), 1, pf);
}
函數的使用:
void main()
{
FILE * pf = fopen("test.txt", "a");
write_log(pf, "My name is %s, I am %d years old\n", "Jack", 15);
return;
}
結果爲:My name is Jack, I am 15 years old
可變長參數作爲參數的參數類型,可以參考vsprintf
int vsprintf(
char *buffer,
const char *format,
va_list argptr
);
因此,只要把可變長參數的宏定義以及幾個函數:
type va_arg(
va_list arg_ptr,
type
);
void va_end(
va_list arg_ptr
);
void va_start(
va_list arg_ptr,
prev_param
); // (ANSI version)
void va_start(
arg_ptr
);
熟悉了,就能夠玩轉可變長參數了。可變長參數真的能在關鍵的時候幹一些漂亮的事情。