1. va_list args; 2. va_start(args,sz); 3. ... 4. va_end(args);
#include<iostream> #include<stdarg.h> //注意这个头文件 using namespace std; void ContentStr(char *sz,...) { const char* pstr=0; va_list args; //第一步 va_start(args,sz); //第二步 cout<<sz<<endl; pstr=va_arg(args,const char*); //第三步 cout<<pstr<<endl; int num=va_arg(args,int); //还是第三步 cout<<num<<endl; va_end(args); //第四步 return ; } int main() { ContentStr("hahaha","asdf",1); return 0; }
#include<iostream> #include<stdarg.h> using namespace std; void LogInfo(char *szFormat,...) { char szBuf[4096]={}; va_list args; //第一步 va_start(args,szFormat); //第二步 _vsnprintf(szBuf,4096,szFormat,args); //第三步 //在这里对字符串 szBuf 作处理,输出到日志文件或直接打印信息 //******************************************************** va_end(args); //第四步 return ; } int main() { LogInfo("收到网关服务器中转命令,主命令:%d,副命令:%d,附带信息",1,2,"hahahaha"); return 0; }
//拼接日志字符串 char logStr[4096]={}; sprintf(logStr,"收到网关服务器中转命令,主命令:%d,副命令:%d,附带信息:%s",1,2,"hahahaha"); //输出 cout<<logStr<<endl; //******************************************************** //使用va_list和_vsnprintf配合,大大减少代码冗余 LogInfo("收到网关服务器中转命令,主命令:%d,副命令:%d,附带信息:s%s",1,2,"hahahaha");
va_list中的_vsntprintf使用介绍,布布扣,bubuko.com
原文:http://www.cnblogs.com/sixbeauty/p/3868177.html