C/C++可变参数例子
#include <stdio.h>
#include <stdarg.h>
int proc(char *fmt,...)
{
char buffer[50];
va_list ptr;
int num;
va_start(ptr, fmt);
num = vsprintf(buffer, fmt, ptr);
va_end(ptr);
printf("%s/n", buffer);
return(num);
};
int main()
{
int i = 1;
float f = 66.0;
char str[5] = "test";
proc("%s %d %f",str, i, f);
return 0;
}
程序结果: test 1 66.000000
函数名: vsprintf
功 能: 格式化输出到串中
用 法: int vsprintf(char *string, char *format, va_list param);
VA_LIST的用法 ( VA_LIST 是在C语言中解决变参问题的一组宏):
(1)首先在函数里定义一具VA_LIST型的变量,这个变量是指向参数的指针
(2)然后用VA_START宏初始化变量刚定义的VA_LIST变量(如在运行VA_START(ap,v)后,ap指向第一个可变参数在堆栈地址)
(3)然后用VA_ARG返回可变的参数,VA_ARG的第二个参数是你要返回的参数的类型。
(4)最后用VA_END宏结束可变参数的获取。然后你就可以在函数里使用第二个参数了。如果函数有多个可变参数的,依次调用VA_ARG获取各个参数。