传递格式化的参数给另外一个函数

来源:互联网 发布:淘宝个人退款率怎么看 编辑:程序博客网 时间:2024/06/06 01:38

传递格式化的参数给另外一个函数

// ValistToFunction.cpp : Defines the entry point for the console application.
//

//功能: 传递格式化的参数给另外一个函数

#include "stdafx.h"

#include <windows.h>

#include <stdlib.h>
#include <stdio.h>
#include <crtdbg.h>
#include <tchar.h>

#define G_INT_MSG_BUF_SIZE (int)2048

int MyPrintf(TCHAR * szFormat);
int MyPrintfV(TCHAR * szFormat, ...);

int main(int argc, char* argv[])
{
    MyPrintfV(_T("[%s] 整理: %d/%d/%d %d:%d"),
        "传递格式化的参数给另外一个函数",
        2010, 06, 06, 16, 28);

    printf("END/n");
    getchar();
    return 0;
}

/// 字符串格式化时, 依赖定长Buffer不好

/// 见本文目录 <<计算变长字符串入参的最大长度>>
int MyPrintfV(TCHAR * szFormat, ...)
{//入参为格式化的参数列表
    va_list args;
    va_start(args, szFormat);
   
    PTCHAR pBufMsg = new TCHAR[G_INT_MSG_BUF_SIZE];
    _ASSERT(pBufMsg);
    memset(pBufMsg, 0, G_INT_MSG_BUF_SIZE);
   
    int nRc = 0;
    nRc = _vsntprintf(pBufMsg, G_INT_MSG_BUF_SIZE, szFormat, args);
    _ASSERT(G_INT_MSG_BUF_SIZE > nRc);
    va_end(args);
   
    MyPrintf(pBufMsg);
   
    delete pBufMsg;
    pBufMsg = NULL;
   
    return S_OK;
}

int MyPrintf(TCHAR * szFormat)
{//入参为单一字符串
    //这里是打印, 换成别的任务, 就是命令行分析, 执行命令行制定的任务
    printf("%s/n", szFormat);
   
    return S_OK;
}

 

<2010_1219>

得到函数列表中的每个参数, 这里假设每个参数都是串, 如果是别的类型,也当串来解析,然后强转一下.

 

传可变参数列表给函数, 适用于用户调用函数,这样方便。

在函数内部如果需要把参数列表,再传给内部函数之前,把参数先解析出来保存好,

效率比再把参数列表复制一份传给内部函数的方法效率高.


<2013_0812> 

计算变长字符串入参的最大长度

使用 _vsntprintf 计算变长格式化入参, 这样可以不用依赖最大缓冲区长度了

std::wstring StringFormatV(wchar_t * szFormat, ...){//入参为格式化的参数列表    size_t          nStrLen     =   0;    wchar_t *       pBufMsg     =   NULL;    std::wstring    strRc;    va_list         args;    va_start(args, szFormat);    nStrLen = _vsntprintf(NULL, 0, szFormat, args);    pBufMsg = new wchar_t[nStrLen + 1];    _ASSERT(pBufMsg);    ::ZeroMemory(pBufMsg, (nStrLen + 1) * sizeof(wchar_t));    nStrLen = _vsntprintf(pBufMsg, nStrLen, szFormat, args);    va_end(args);    strRc = pBufMsg;    delete []pBufMsg;    pBufMsg = NULL;    return strRc;}



原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 恋与制作人原来的帐号不见了怎么办 手机号被别人注册了手机银行怎么办 想上老婆的陌陌号但要验证码怎么办 中国家医居民端注册信息有误怎么办 别人给我充的q币怎么办 qq忘记密码手机号码也换了怎么办 手机号码不用了微信忘记密码怎么办 手机号码注销了微信忘记密码怎么办 微信忘记密码手机号码也换了怎么办 微信钱包里的钱莫名少了怎么办 被骗给人冲q币了怎么办 支付宝账户异常无法领取红包怎么办 微信q币支付错了怎么办 王者荣耀不小心把点卷用了怎么办 微信绑定的qq号密码忘记了怎么办 微信红包实名认证没银行卡怎么办 手机烂了换新手机微信支付宝怎么办 支付宝转账给别人号码没用了怎么办 微信转账验证码收不到怎么办 陌生网友生日叫我发红包怎么办 微信群的群主不小心推出群该怎么办 支付宝验证码被别人知道了怎么办 微信解除银行卡绑定零钱清零怎么办 qq号被盗了理财通的钱怎么办 工行转错账号的钱被冻结怎么办 微信20w限额满了怎么办 通过qq号申请微信被盗了怎么办 微信号被盗手机绑定被改怎么办 腾讯视频激活码兑换达到限制怎么办 虚拟服务购买自动每月扣q币怎么办 微信被骗充值Q币怎么办 微信给别人充q币怎么办 k歌别人送的k币怎么办 忘记了qq号码但记得密码怎么办 q自己的活干完了该怎么办 在应用宝下载的游戏搜不到了怎么办 衣服有图片在淘宝找不到同款怎么办 淘宝卖家小儿说质量不合格怎么办 订单显示显示已签收没收到货怎么办 网上买过的东西查不到订单号怎么办 亚航的组合机票飞机延误怎么办