相信大家都用过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=;
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",); return ;
}
 
不过我要介绍的是  _vsntprintf  这个函数,使用这个函数,我们能写一些直接拼接字符串的函数,如日志记录等的函数:
用法如下:
#include<iostream>
#include<stdarg.h>
using namespace std; void LogInfo(char *szFormat,...)
{
char szBuf[]={};
va_list args; //第一步
va_start(args,szFormat); //第二步
_vsnprintf(szBuf,,szFormat,args); //第三步
va_end(args); //第四步
    //在这里对字符串  szBuf  作处理,输出到日志文件或直接打印信息

    //********************************************************
    return ;
} int main()
{
LogInfo("收到网关服务器中转命令,主命令:%d,副命令:%d,附带信息",,,"hahahaha"); return ;
}
 
使用va_list  和 _vsnprintf 能大大提高我们对字符串的处理效率,如果不这样处理,普通的日志记录,我们必须分两个步骤:1.字符串的拼接,2.输出
//拼接日志字符串
char logStr[]={};
sprintf(logStr,"收到网关服务器中转命令,主命令:%d,副命令:%d,附带信息:%s",,,"hahahaha");
//输出
cout<<logStr<<endl;
//******************************************************** //使用va_list和_vsnprintf配合,大大减少代码冗余
LogInfo("收到网关服务器中转命令,主命令:%d,副命令:%d,附带信息:s%s",,,"hahahaha");
 
 
 

va_list中的_vsntprintf使用介绍的更多相关文章

  1. asp.net中缓存的使用介绍一

    asp.net中缓存的使用介绍一 介绍: 在我解释cache管理机制时,首先让我阐明下一个观念:IE下面的数据管理.每个人都会用不同的方法去解决如何在IE在管理数据.有的会提到用状态管理,有的提到的c ...

  2. lua解析脚本过程中的关键数据结构介绍

    在这一篇文章中我先来介绍一下lua解析一个脚本文件时要用到的一些关键的数据结构,为将来的一系列代码分析打下一个良好的基础.在整个过程中,比较重要的几个源码文件分别是:llex.h,lparse.h.l ...

  3. linux中ldconfig的使用介绍

    linux中ldconfig的使用介绍 ldconfig是一个动态链接库管理命令,其目的为了让动态链接库为系统所共享. ldconfig的主要用途: 默认搜寻/lilb和/usr/lib,以及配置文件 ...

  4. 【js】IE、FF、Chrome浏览器中的JS差异介绍

    如何判断浏览器类型 转:http://www.cnblogs.com/carekee/articles/1854674.html 1.通过浏览器特有的对象 如ie 的ActiveXObject  ff ...

  5. Apache中 RewriteRule 规则参数介绍

    Apache中 RewriteRule 规则参数介绍 摘要: Apache模块 mod_rewrite 提供了一个基于正则表达式分析器的重写引擎来实时重写URL请求.它支持每个完整规则可以拥有不限数量 ...

  6. 使用Memcache在PHP中调试方法的介绍及应用

    使用Memcache在PHP中调试方法的介绍及应用 如果我们在网络开发中,特别是大访问量的web项目开发中,为了提高响应速度,减少数据查询运算,那么我们都会选用memcahce.首先我们必须要安装,接 ...

  7. python中multiprocessing.pool函数介绍_正在拉磨_新浪博客

    python中multiprocessing.pool函数介绍_正在拉磨_新浪博客     python中multiprocessing.pool函数介绍    (2010-06-10 03:46:5 ...

  8. 基于Server-Sent Event的简单聊天室 Web 2.0时代,即时通信已经成为必不可少的网站功能,那实现Web即时通信的机制有哪些呢?在这门项目课中我们将一一介绍。最后我们将会实现一个基于Server-Sent Event和Flask简单的在线聊天室。

    基于Server-Sent Event的简单聊天室 Web 2.0时代,即时通信已经成为必不可少的网站功能,那实现Web即时通信的机制有哪些呢?在这门项目课中我们将一一介绍.最后我们将会实现一个基于S ...

  9. PHP删除数组中空值的方法介绍

    这篇文章主要介绍了PHP删除数组中空值的方法介绍,需要的朋友可以参考下 说来惭愧,以前在去掉数组的空值是都是强写foreach或者while的,利用这两个语法结构来删除数组中的空元素,简单代码如下: ...

随机推荐

  1. g++动态库静态库混合链接

    今天编译一个程序时报错: g++ -static -o echo.fcgi echo_adaptor.o echo.o -L/usr/local/lib/ -lfastcgipp -L/usr/lib ...

  2. C#字符串来袭——因为爱,所以爱

    一直以来都喜欢谢霆锋,喜欢他身上的那股劲,也一直喜欢唱他的歌,比如这首最广为人知的<因为爱,所以爱>:因为爱所以爱,温柔经不起安排,愉快那么快,不要等到互相伤害...是的,没到互相伤害,他 ...

  3. 【转】linux性能相关的命令和概念

    1. top命令结果解读 23:31:27:系统时间 up 8 days: 表示从开机到现在,一共运行了8天 1 user:1个用户正在使用系统 load average:系统负载,即任务队列的平均长 ...

  4. 禁止 git 自动转换换行符

    开发团队都在 windows 下开发,有IDE管理代码.对我们来说,最好是禁用换行转换符的功能.我用 cygwin 提交代码,提交时总提示自动转换换符.其实都不用提交,仅运行 git status 看 ...

  5. javascript 自定义Map

      迁移时间:2017年5月25日08:24:19 Author:Marydon 三.自定义Map数据格式 需特别注意的是: js中没有像java中的Map数据格式,js自带的map()方法用于:返回 ...

  6. Struts2的国际化入门

    Struts2的国际化入门 Struts2国际化是建立在Java国际化的基础上的,一样是通过提供不同国家/语言环境的消息资源,然后通过ResourceBundle加载指定Locale对应的资源文件,再 ...

  7. 【转】OMCS网络语音视频聊天框架(跨平台)

    原文地址:http://www.cnblogs.com/zhuweisky/archive/2012/08/02/2617877.html OMCS网络语音视频框架是集成了语音通话.视频通话.远程桌面 ...

  8. Android面试常问到的知识点

    一.算法,数据结构 1.排序算法 2.查找算法 3.二叉树 4.广度,深度算法: 二.java基础 1.集合Collection,List,Map等常用方法,特点,关系: 2.线程的同步,中断方式有几 ...

  9. python基础篇---实战---用户登入注册程序

    一.首先了解需求: 1.支持多个用户登入 2.登入成功后显示欢迎,并退出程序 3.登入三次失败后,退出程序,并在下次程序启动尝试登入时,该用户名依然是锁定状态 二.文件代码如下: f = open(& ...

  10. 4.lists(双向链表)

    一.概述 是一个线性链表结构,它的数据由若干个节点构成,每一个节点都包括一个信息块(即实际存储的数据).一个前驱指针和一个后驱指针.它无需分配指定的内存大小且可以任意伸缩,这是因为它存储在非连续的内存 ...