字符串变参格式化

#include "stdafx.h"
#include <string>
#include <stdarg.h>
#include <memory>
#include <iostream>
#include <map>
using namespace std;

// https://learn.microsoft.com/en-us/cpp/c-runtime-library/reference/vscprintf-vscprintf-l-vscwprintf-vscwprintf-l?view=msvc-170&devlangs=cpp&f1url=%3FappId%3DDev14IDEF1%26l%3DEN-US%26k%3Dk(STDIO%252F_vscprintf)%3Bk(_vscprintf)%3Bk(DevLang-C%252B%252B)%3Bk(TargetOS-Windows)%26rd%3Dtrue
//https://learn.microsoft.com/en-us/cpp/c-runtime-library/reference/vsprintf-s-vsprintf-s-l-vswprintf-s-vswprintf-s-l?view=msvc-170&devlangs=cpp&f1url=%3FappId%3DDev14IDEF1%26l%3DEN-US%26k%3Dk(STDIO%252Fvsprintf_s)%3Bk(vsprintf_s)%3Bk(DevLang-C%252B%252B)%3Bk(TargetOS-Windows)%26rd%3Dtrue
//https://learn.microsoft.com/en-us/cpp/c-runtime-library/reference/vsprintf-vsprintf-l-vswprintf-vswprintf-l-vswprintf-l?view=msvc-170
std::string StringFormat(const char* format, ...) {
    va_list args = nullptr;
    va_start(args, format);
    // Returns the number of characters in the formatted string using a pointer to a list of arguments.
    size_t size = _vscprintf(format, args) + 1;
    char* buf = new char[size];
    memset(buf, 0, size);
    vsprintf_s(buf, size, format, args);
    std::string str_tmp(buf);
    delete[] buf;
    buf = nullptr;
    va_end(args);
    return str_tmp;
}

int main() {
    int64_t i64 = 111;    // 32位操作系统下,int格式化为%lld会存在异常!!!
    string str = StringFormat("String format test, int:%d, int64:%lld, float: %f, char*:%s",
        1, i64, 3.1, "456");
    cout << str << endl;
    getchar();
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值