void Log( const TCHAR *pszFormat, ... )
{
TCHAR buf[] ;
va_list arglist ; try
{
_tcscpy_s ( buf, , _T("\n") ) ;
va_start(arglist, pszFormat) ;       //   Type xx = va_arg( arglist, Type );
      //依次获取指定参数,定义类型必须相同
_vstprintf_s(&buf[_tcslen(buf)], -_tcslen(buf), pszFormat, arglist) ;
va_end(arglist) ;
_tprintf ( buf ) ;
}
catch ( ... ){}
}
 
INTSIZEOF 宏,获取类型占用的空间长度,最小占用长度为int的整数倍:
#define _INTSIZEOF(n) ( (sizeof(n) + sizeof(int) - 1) & ~(sizeof(int) - 1) )
VA_START宏,获取可变参数列表的第一个参数的地址(ap是类型为va_list的指针,v是可变参数最左边的参数):
#define va_start(ap,v) ( ap = (va_list)&v + _INTSIZEOF(v) )
VA_ARG宏,获取可变参数的当前参数,返回指定类型并将指针指向下一参数(t参数描述了当前参数的类型):
#define va_arg(ap,t) ( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) )
VA_END宏,清空va_list可变参数列表:
#define va_end(ap) ( ap = (va_list)0 )
 
2. 格式化注意% 字符串
#include "stdafx.h"
#include <stdarg.h> unsigned int net_Printf(const char *psz_fmt, ... )
{
char psz [4096] = {0}; va_list args;
va_start( args, psz_fmt ); int i_size = vsprintf( psz, psz_fmt, args );
printf("%s", psz); if( i_size == -1 )
return -1; va_end( args ); return 0;
} int _tmain(int argc, _TCHAR* argv[])
{ char str[4096] = {"abcd%12%3s%20d"};
net_Printf(str); return 0;
}

  结果输出:“0x0012de7c "abcd%3s                   0"

解析:"abcd%12%3s%20d"

  • "%12%" 将会变为”%“,第一个%号转义,12 表示 在"%"和字母之间插进数字表示最大场宽。
  • "3s" 直接显示
  • "%20d" 20表示最大宽度,默认空格填充了,%d 默认0显示。

如是想获得原串,可以加 %转义,

char str[4096] = {"abcd%%12%%3s%%20d"};

 

va_list的更多相关文章

  1. va_list结构体

    http://stackoverflow.com/questions/4958384/what-is-the-format-of-the-x86-64-va-list-structure 这是我在st ...

  2. 详细!交叉编译时 note: the mangling of 'va_list' has changed in GCC 4.4解决办法

    为什么要在标题前面加了详细两个字,就是为了吸引看文章的你还有写文章的我这种小白,我是从坑里面爬出来了. 废话少说.... 问题就是这样子了,至于解决办法,在网上搜索了很久,大多数以一段英文作为解决办法 ...

  3. 《OOC》笔记(3)——C语言变长参数va_list的用法

    <OOC>笔记(3)——C语言变长参数va_list的用法 C语言中赫赫有名的printf函数,能够接受的参数数目不固定,这就是变长参数.C#里也有params这个关键字用来实现变长参数. ...

  4. va_list深究

    va_list深究 2011-04-21 21:06:11|  分类: C/C++|字号 订阅     VA函数(variable argument function),参数个数可变函数,又称可变参数 ...

  5. C++省略参数(va_list va_start va_arg va_end)的简单应用

    原文参考自:http://www.cnblogs.com/hanyonglu/archive/2011/05/07/2039916.html #include <iostream> #in ...

  6. va_list/va_start/va_arg/va_end深入分析【转】

    转自:http://www.cnblogs.com/justinzhang/archive/2011/09/29/2195969.html va_list/va_start/va_arg/va_end ...

  7. 不定参数的传递VA_LIST的用法

    VA_LIST的用法:(1)首先在函数里定义一具VA_LIST型的变量,这个变量是指向参数的指针: (2)然后用VA_START宏初始化变量刚定义的VA_LIST变量,使其指向第一个可 变参数的地址: ...

  8. linux C中va_list用法

    #include <stdio.h> #include <stdarg.h> int demo( int, ... ); int main( void ) { demo(1, ...

  9. 对C语言中va_list,va_start,va_arg和va_end的一点理解

    这几个函数和变量是针对可变参数函数的,什么是可变参数函数呢,最经典的莫过于printf和scanf,这两个函数的声明如下: int printf(const char *format, ...); i ...

  10. 【转载】va_list 可变参数 简介 va_copy vprintf

    [说明]本文转载自 smart 的文章 http://blog.sina.com.cn/s/blog_590be5290100qhxr.html  及百度百科 va_list是一个宏,由va_star ...

随机推荐

  1. 报错:LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏

    参考原文:http://bbs.csdn.net/topics/390121452 项目>属性>配置属性>清单工具>输入和输出>嵌入清单:原来是“是”,改成“否” 如果上 ...

  2. Azure School,让你系统化快速学习人工智能

    要说目前最热门的技术,非人工智能莫属了,让计算机程序能够看懂.听懂.读懂.理解我们的世界!想想就激动!! 上至高大上的个人数字化助理,下至P图软件,各种应用都开始增加AI相关的功能,试问又有哪个技术爱 ...

  3. linux 命令——27 chmod

    chmod命令用于改变linux系统文件或目录的访问权限.用它控制文件或目录的访问权限.该命令有两种用法. 一种是包含字母和操作符表达式的文字设定法: 另一种是包含数字的数字设定法. Linux系统中 ...

  4. Codeforces Round #327 (Div. 2) B Rebranding(映射)

    O(1)变换映射,最后一次性替换. #include<bits/stdc++.h> using namespace std; typedef long long ll; ; char s[ ...

  5. hdu-3549 Flow Problem---最大流模板题(dinic算法模板)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3549 题目大意: 给有向图,求1-n的最大流 解题思路: 直接套模板,注意有重边 传送门:网络流入门 ...

  6. CYUSB

    /*Summary The application cydesc is used to open the device with cypress GUID and get the device des ...

  7. fstatfs/statfs详解

    [fstatfs/statfs系统调用]       功能描述:   查询文件系统相关的信息.     用法:   #include <sys/vfs.h>    /* 或者 <sy ...

  8. js点击拉拽轮播图pc端移动端适配

    <div class="content"> <button class="left">left</button> <b ...

  9. react 的虚拟dom

    前端优化的主要方面就是减少页面的DOM操作,减少重排和重绘,React在这方面做了优化,采用了所谓的虚拟DOM,其实我们平时也会遇到虚拟DOM,只是你没有注意罢了,请听我娓娓道来.  所谓的虚拟DOM ...

  10. POJ 2774 后缀数组 || 二分+哈希

    Long Long Message Time Limit: 4000MS   Memory Limit: 131072K Total Submissions: 35607   Accepted: 14 ...