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


    前言:
    看到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 };
            //简单的将消息输出到缓冲区里,返返回的是缓冲区的字符个数,不包括''
            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;
    
    }
    
  • 相关阅读:
    Command Line Tools for win32
    鼠标快速复制粘帖工具!
    IBM T系列笔记本安装2003未知设备问题!
    拔智齿!痛苦磨难中!
    I am a hero!
    vim学习笔记!
    产生数
    NumPy矩阵运算
    1130:找第一个只出现一次的字符
    小A与小姐姐给气球涂色[dp + 快速幂]
  • 原文地址:https://www.cnblogs.com/priarieNew/p/9756353.html
Copyright © 2020-2023  润新知