有时候不仅需要处理变长参数,还需要将变长参数作为参数,传递给其他函数。
先上一段代码,定义一个函数:
/*函数说明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
);
熟悉了,就能够玩转可变长参数了。可变长参数真的能在关键的时候干一些漂亮的事情。