日志打印或者格式字符串时,可能会用到不定参数的使用,这里记录一下。

格式化字符串有很多方法:

##是一个连接符号,用于把参数连在一起

#是“字符串化”的意思,出现在宏定义中的#是把跟在后面的参数转换成一个字符串

并且# ##都只能出现在宏定义中

include <stdio.h>

#define test(n) printf("arg" #n " = %d\n", arg##n) 

int main(){
int arg9 = 5;
test(9); //arg9 = 5
return 0;
}
  • 有时候需要自己调用vsprintf
#include <stdio.h>
#include <stdarg.h>
#include <string> void format_args(std::string &res, const char* format, ...){
char buffer[256];
va_list args;
va_start(args, format);
//使用vsnprintf避免buff不足, 出core
vsnprintf(buffer, sizeof(buffer), format, args);
va_end(args); res = buffer;
} int main(){
int arg1 = 5;
std::string arg2 = "OK";
std::string res; format_args(res, "res is arg1 = %d, arg2 = %s", arg1, arg2.c_str());
puts(res.c_str());
return 0;
}

写博客发现个markdown的用法, 对标题符合#转: \#

C++ 中的不定参数与格式化字符串 # ## vsprintf的更多相关文章

  1. C和C++中的不定参数

    在初学C的时候,我们都会用到printf函数来写Hello World的程序.在我们看printf函数的声明时,会看到类似于下面代码 int printf(const char * __restric ...

  2. Python中使用%还是format来格式化字符串?

    Python中应该使用%还是format来格式化字符串?   %还是format Python中格式化字符串目前有两种阵营:%和format,我们应该选择哪种呢? 自从Python2.6引入了form ...

  3. JAVA中String.format的用法 格式化字符串,格式化数字,日期时间格式化,

    1.对整数进行格式化:%[index$][标识][最小宽度]转换方式        我们可以看到,格式化字符串由4部分组成,其中%[index$]的含义我们上面已经讲过,[最小宽度]的含义也很好理解, ...

  4. .NET中DateTime.Now.ToString的格式化字符串

    .NET中DateTime.Now.ToString显示毫秒:DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") DateTime.N ...

  5. Objective-C中使用不定参数个数的方法调用

    Objective-C中,定义并使用带有不定参数个数的对象方法与C函数类似,规则上也要求不定参数列表中必须至少要有一个形参,然后参数列表的最后跟省略号表示不定参数.省略号不能放在参数当中部分,只能放在 ...

  6. subprocess中命令为参数序列和字符串的区别

    参数args 参数args可以是一个参数序列,也可以是一个单独的字符串.参数序列通常是首选的,因为它允许模块处理参数的转义和引号(例如,允许文件名中有空格). 如果传递参数序列,默认情况下,程序执行序 ...

  7. c(++)可变参数之格式化字符串

    0.序言 使用printf函数,其参数就是可变参数.下面将使用 C语言  的库函数实现可变参数的函数 . 用途(欢迎补充): A.记录日志,可能需要将变量格式化输出到日志文件. B.格式化字符串,显示 ...

  8. 在sql语句中使用 xml for path 格式化字符串的方法总结

    此方法实现的是将查询表中的某个字段,格式化成  字符串1,字符串2,字符串3...的格式 假设我们现在有两个表 分别是 分组表 grouped和分组成员表 groupuser grouped表有连个字 ...

  9. python 常见包中的不定参数

随机推荐

  1. 牛客 Wannafly 挑战赛26D 禁书目录 排列组合 概率期望

    原文链接https://www.cnblogs.com/zhouzhendong/p/9781060.html 题目传送门 - NowCoder Wannafly 26D 题意 放一放这一题原先的题面 ...

  2. Python3爬虫知识点总结

    1.requests获取响应头的方法 eg:获取响应头信息 import requests res = request.head(url).headers print(res)

  3. Hive| 查询

    Hive中执行SQL语句时,出现类似于“Display all 469 possibilities? (y or n)”的错误,根本原因是因为SQL语句中存在tab键导致,tab键在linux系统中是 ...

  4. Could not find result map XXX 解决办法

    错误定位在xml文件中 resultmap类型不匹配

  5. 12306登录爬虫 session版本

    import requests import re import base64 # 定义session headers = { 'User-Agent':'Mozilla/5.0 (Windows N ...

  6. 关闭selinux服务

    vim /etc/selinux/config 将SELINUX=disabled 执行setenforce 0

  7. 最长不下降子序列nlogn

    b[i]表示长度为i的最长不下降子序列的最小末尾元素的值显然它是单调递增的,满足二分性质,然后就可以愉快地二分啦. #include<iostream> #include<cstdi ...

  8. javaScript函数节流与函数防抖

    javaScript函数节流与防抖之区别 函数防抖(debounce)与函数节流(throttle)都是为了限制函数的执行频次,以优化函数触发频率过高导致的响应速度跟不上触发频率,出现延迟.假死或卡顿 ...

  9. Xamarin Essentials教程磁力计Magnetometer

    Xamarin Essentials教程磁力计Magnetometer   磁力计也叫地磁.磁感器,可用于测试磁场强度和方向.在手持设备中,通过磁力计可以计算设备的左右.前后倾斜角度,广泛应用于手机各 ...

  10. Xamarin Essentials教程剪贴板Clipboard

    Xamarin Essentials教程剪贴板Clipboard   现在手机设备操作以触屏为主,不便于文本输入.虽然可以通过复制/粘贴的方式,借助系统剪贴板简化操作,但仍然不够方便.如果通过代码操作 ...