接上文
三:获取省略号指定的参数
在函数体中声明一个va_list,然后用va_start函数来获取参数列表中的参数,使用完毕后调用va_end()结束 像这段代码:
void TestFun(char* pszDest, int DestLen, const char* pszFormat, ...)
{
va_list args;
va_start(args, pszFormat); //一定要“...”之前的那个参数
_vsnprintf(pszDest, DestLen, pszFormat, args);
va_end(args);
}
四:演示如何使用参数个数可变的函数,采用ANSI标准形式
#include <stdio.h>void TestFun(char* pszDest, int DestLen, const char* pszFormat, ...)
{
va_list args;
va_start(args, pszFormat); //一定要“...”之前的那个参数
_vsnprintf(pszDest, DestLen, pszFormat, args);
va_end(args);
}
#include <stdlib.h>
#include <stdarg.h>
/*函数原型声明,至少需要一个确定的参数,注意括号内的省略号*/
int demo(char*, ...);
/**
* @brief The entry of this program
*
* @param argc counts of argument
* @param argv argument variables stored in
*
* @return EXIT_SUCCESS
*/
int main (int argc, char **argv)
{
demo("Demo","This","is","a","demo!","");
return EXIT_SUCCESS;
} //end of function main
/*ANSI标准形式的声明方式,括号内的省略号表示可选参数*/
int demo (char* msg, ...)
{
/*定义保存函数参数的结构*/
va_list argp;
int argno = 0;
char* para;
/*argp指向传入的第一个可选参数,msg是最后一个确定的参数*/
va_start(argp,msg);
while(1)
{
para = va_arg(argp, char*);
if(strcmp(para, "")==0)
break;
printf("parameter #%d is : %s\n", argno, para);
argno++;
}
va_end(argp);
/*将argp置为NULL*/
return 0;
} //end of function demo