在C和C++中,变参格式化函数虽然非类型安全,但却十分便利,因为得到广泛使用。对于常见的size_t类型要用“%zu”,ssize_t用”%zd“,int64_t用“% ”PRId64,uint64_t用“% ”PRIu64,long用"%ld",long long用"%lld",示例:
const int64_t datetime = INT64_C(20190124144930);
​printf("datetime: %" PRId64"\n", datetime);
注意在PRId64前保留一个空格,以避免编译警告

format_string源代码链接:
https://github.com/eyjian/r3c/blob/master/utils.cpp
​https://github.com/eyjian/libmooon/blob/master/src/utils/string_utils.cpp​​​
​​
format_string源代码:

// snprintf()第2个参数的大小,要求包含结尾符'\0'
// snprintf()的返回值是期望大小,不包含结尾符'\0',
// 下面假设snprintf()的第二个参数值为10,则:
// 1) 当str为"abc"时,它的返回值的大小是3,"abc"的字符个数刚好是3;
// 2) 当str为"1234567890"时,它的返回值大小是10,"1234567890"的字符个数刚好是10;
// 3) 当str为"1234567890X"时,它的返回值大小是11,"1234567890X"的字符个数刚好是11。
//
// int asprintf(char **strp, const char *fmt, ...);
std::string format_string(const char* format, ...)
{
size_t size = ;
std::string buffer(size, '\0');
char* buffer_p = const_cast<char*>(buffer.data());
int expected = ;
va_list ap; while (true)
{
va_start(ap, format);
expected = vsnprintf(buffer_p, size, format, ap); va_end(ap);
if (expected>- && expected<=static_cast<int>(size))
{
break;
}
else
{
/* Else try again with more space. */
if (expected > -) /* glibc 2.1 */
size = static_cast<size_t>(expected + ); /* precisely what is needed */
else /* glibc 2.0 */
size *= ; /* twice the old size */ buffer.resize(size);
buffer_p = const_cast<char*>(buffer.data());
}
} // expected不包含字符串结尾符号,其值等于:strlen(buffer_p)
return std::string(buffer_p, expected>?expected:);
}

#微码分享#C++变参字符串格式化函数format_string的更多相关文章

  1. PHP中常用的字符串格式化函数总结

    注意:在PHP中提供的字符串函数处理的字符串,大部分都不是在原字符串上修改,而是返回一个格式化后的新字符串. 一.取出空格和字符串填补函数 空格也是一个有效的字符,在字符串中也会占据一个位置.用户在表 ...

  2. php课程 6-22 字符串格式化函数有哪些(精问)

    php课程 6-22 字符串格式化函数有哪些(精问) 一.总结 一句话总结: 1.猜测一下$_GET()怎么来的? 函数赋值给变量的操作:$_YZM=get();   这样就可以很好的解释哪些全局变量 ...

  3. JS字符串格式化函数 string.format

    原生JS写的仿C#的字符串format函数,在此基础上又增加了便于JS使用的字面量对象参数. 参照C#中的规则,调用的时候会检测字符串格式,如果字符串格式不规范,或者传入的参数为null或undefi ...

  4. 强大的字符串格式化函数 - format

    自python2.6开始,新增了一种格式化字符串的函数str.format(),它通过{}和:来代替% 位置方法格式化 >>>'{}-{}'.format('simon','ting ...

  5. php中常用的字符串格式化函数

    ltrim():从字符串左删除空格或其他预定义字符串 rtrim():从字符串的末端开始删除空白字符串或其它预定义字符 trim():从字符串的两端删除空白字符和其他预定字符 str_pad():把字 ...

  6. php字符串格式化函数addslashes()

    1.这个函数的使用和php.ini中的magic_quotes_gpc的配置有关,默认情况下,这个配置为on.并且,这个配置处于一个较高级别,脚本中不能修改.所以,检测这个配置情况就很重要. 2.在脚 ...

  7. PHP常用字符串操作函数实例总结(trim、nl2br、addcslashes、uudecode、md5等)

    /*常用的字符串输出函数 * * echo() 输出字符串 * print() 输出一个或多个字符串 * die() 输出一条信息,并退出当前脚本 * printf() 输出格式化字符串 * spri ...

  8. PHP内置的字符串处理函数

    字符串的特点    1.其他类型的数据用在字符串类型处理函数中,会自动将其转化成字符串后,在处理 <?php echo substr("abcdefghijklmn",2,4 ...

  9. PHP字符串格式化特点和漏洞利用点

    转载至: https://www.anquanke.com/post/id/170850 PHP中的格式化字符串函数 在PHP中存在多个字符串格式化函数,分别是printf().sprintf().v ...

随机推荐

  1. idea中快捷键设置为eclipse中快捷键

    打开file-settings,然后搜索key,在keymap中选择eclipse (1) (2)

  2. faiss CPU版本+GPU版本安装

    faiss安装 faiss是facebook开发的有CPU版本和GPU版本的求密集向量相似性和进行密集向量聚类的库. faiss用c++编写,安装faiss需要在github上下载其c++源码并用ma ...

  3. axios基本使用

    1,安装axios cnpm install axios --save 2.在main.js里面引入 import axios from 'axios' /*解决在其他组件中不能用*/Vue.prot ...

  4. python bisect 排序模块 二分查找与 bisect 模块

    python 3.6.5 import bisect bisect_list=dir(bisect)print(bisect_list)bisect_list = ['__builtins__', ' ...

  5. go 语言实现一个简单的 web 服务器

    学习Go语言的一些感受,不一定准确. 假如发生战争,JAVA一般都是充当航母战斗群的角色.一旦出动,就是护卫舰.巡洋舰.航母舰载机.预警机.电子战飞机.潜艇等等浩浩荡荡,杀将过去.(JVM,数十个JA ...

  6. overflow visibility opacity(透明度) vertical-align 等等

     一,overflow属性:   1,四个值:    visible     默认值.内容不会被修剪,会呈现在元素框之外.    hidden        内容会被修剪,并且其余内容是不可见的.   ...

  7. andorid 全部对话框

    .xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android ...

  8. Linux系统性能监控工具介绍之-tsar

    Linux系统性能监控工具介绍之-tsar Linux系统性能监控工具介绍之-tsar 2017-03-02 20:25 175人阅读 评论(0) 收藏 举报  分类: LINUX调优(9)    目 ...

  9. [转载]linux awk命令详解

    简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再 ...

  10. sqrt函数倒数计算新对比

    某人发表说 雷神之锤 里面有一个 1/sqrt(x) 的函数非常了不起. 但经过实测,发现现在计算机已经优化, 该算法已经没有优势. 具体看文档: <a href="http://fi ...