码迷,mamicode.com
首页 > 编程语言 > 详细

c语言解决函数变参数问题 va_list

时间:2018-10-08 20:45:57      阅读:180      评论:0      收藏:0      [点我收藏+]

标签:定义变量   tar   cal   arp   start   cpp   需要   etc   getchar   

前言:
看到sprintf,swprintf之类的可变参数格式化函数,是否想过我们能写一个自定义的类似的函数吗?答案是很定的,下面来介绍一种方法,用va_list,va_start, va_end来实现。
       va_list是一个宏,使用的时候先定义一个变量,然后用va_start来初始化,使用完后用va_end来结束。使用时我们可以分析每一个参数,这时要使用va_argc,但是没有方法知道有多少个参数。所以可以简单的将参数格式化输出到一个缓冲区里,需要使用函数vsprintf。

举一个简单的小例子:

#include "stdafx.h"
#include <Windows.h>

void varPrint(char *format, ...)
{
	va_list va;          //定义变量
	va_start(va, format); //初始化变量
	char szMsg[0x30] = { 0 };
        //简单的将消息输出到缓冲区里,返返回的是缓冲区的字符个数,不包括‘\0‘
        int nCount = vsnprintf_s(szMsg, sizeof(szMsg), sizeof(szMsg)-sizeof(char), format, va);
  
	int argc1 = va_arg(va, int);//第一个参数为va_list变量,第二个参数为要返回的数据类型
	int argc2 = va_arg(va, int);//。。。。。。。。
	int argc3 = va_arg(va, int);

	va_end(va);//最后释放资源
	printf_s("result:%s", szMsg);
}

int _tmain(int argc, _TCHAR* argv[])
{
	SYSTEMTIME sysTime = { 0 };
	CHAR szMsg[512] = { 0 };
	GetLocalTime(&sysTime);
       //这里的格式化信息将在调用中输出
	varPrint("Msg:%d-%d-%d %d", sysTime.wYear, sysTime.wMonth, sysTime.wDay, sysTime.wDayOfWeek);
	getchar();
	return 0;

}

 

c语言解决函数变参数问题 va_list

标签:定义变量   tar   cal   arp   start   cpp   需要   etc   getchar   

原文地址:https://www.cnblogs.com/priarieNew/p/9756353.html

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