C语言可变参数解析方法

一、可变参数概念

有些函数的参数个数是可变,例如printf()函数,其函数原型为:

int printf( const char* format, ...); 

它除了有一个参数format固定以外,后面跟的参数的个数和类型是可变的(用三个点“…”做参数占位符),实际调用时可以有以下的形式:

printf("%d",i); 
printf("%s",s); 
printf("the number is %d ,string is:%s", i, s); 

二、处理可变参数的相关宏

// 初始化va_list变量arg_ptr,用来存储参数地址的指针
// prev_param是可变参数列表的前一个参数,即最后一个固定参数
void va_start( va_list arg_ptr, prev_param ); 

// 根据参数的类型,通过va_list变量arg_ptr来获取参数的值
type va_arg( va_list arg_ptr, type ); 

// 结束可变参数处理
void va_end( va_list arg_ptr ); 

va在这里是variable-argument(可变参数)的意思。 这些宏定义在stdarg.h中,所以用到可变参数的程序应该包含这个头文件。

三、解析可变参数实例

void printLog(char* format, …) 
{ 
	va_list args; 
	va_start(args, format); 
	MyPrintLog(char *format, args);
	va_end(args); 
} 

void MyPrintLog(char *format, va_list args) {
	char logText[2048];
	char temp[1024];
	int i = 0, index = 0;
	int len = strlen(format);

	memset(logText, 0, sizeof(logText));
	for (i=0; i

你可能感兴趣的:(c语言)