码迷,mamicode.com
首页 > 其他好文 > 详细

va_list中的_vsntprintf使用介绍

时间:2014-07-26 00:01:06      阅读:407      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   使用   os   strong   文件   io   

相信大家都用过sprintf这个函数,就是下面这样:
int sprintf( char *bufferconst char *format [, argument] ... );
在之前看到了用va_list实现的几个处理字符串的函数,基本都是这种形式的,感到非常好用,今天来谈一下 va_list 的使用问题。
 va_list的用法和原理网上一大堆,我都懒得抄了,大概介绍一下它的用法就好:
第一步:定义一个 va_list变量 。
第二步:使用  va_start  函数初始化这个变量。
第三步:对上面的变量操作。
第四步:使用 va_end 清空va_list可变参数列表。
1. va_list args;
2. va_start(args,sz);
3. ...
4. va_end(args);

  

关键是第三步那里的操作,一般是用 va_arg来取参数:
#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;
}

 

 
不过我要介绍的是  _vsntprintf  这个函数,使用这个函数,我们能写一些直接拼接字符串的函数,如日志记录等的函数:
用法如下:
#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;
}
 
使用va_list  和 _vsnprintf 能大大提高我们对字符串的处理效率,如果不这样处理,普通的日志记录,我们必须分两个步骤:1.字符串的拼接,2.输出
//拼接日志字符串
    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

va_list中的_vsntprintf使用介绍

标签:style   blog   color   使用   os   strong   文件   io   

原文地址:http://www.cnblogs.com/sixbeauty/p/3868177.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!