在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. 编程,将data段中的字符串转化成大写

    assume cs:code data segment db 'conversation' data ends code segment start: mov ax,data mov ds,ax ca ...

  2. a file was not found

    除了权限问题 还有可能是vm的字符串长度超出限制

  3. php使用fputcsv进行大数据的导出

    为了实验大数据的导出,我们这里先自已创建一张大表,表结构如下: CREATE TABLE `tb_users` ( `id` int(11) unsigned NOT NULL AUTO_INCREM ...

  4. sqlserver数据库命名规则

    sqlserver数据库命名规则: (1)第一个字符必须是字母或“_”.“@”.“#” (2)数据库名称不能是T-SQL的保留字 (3)不允许嵌入空格或其他特殊字符

  5. 微信公众号H5支付步骤

    微信公众平台:https://mp.weixin.qq.com/ 进入 微信支付 管理>开通支付功能. 微信支付|商户平台: 设置安全目录:https://pay.weixin.qq.com/i ...

  6. Vue Create 创建一个新项目 命令行创建和视图创建

    Vue Create 创建一个新项目 命令行创建和视图创建 开始之前 你可以先 >>:cd desktop[将安装目录切换到桌面] >>:vue -V :Vue CLI 3.0 ...

  7. js的日期格式判断

    var reg = /^(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})$/; var str = (new Date).toLocaleString() ...

  8. Python 环境安装教程(Windows 10)

    Python编程语言非常强大,非常容易上手,版本更新也不慢,在win10 x64中兼容性也很好,直接安装不需另外配置,虽然Python2和3有点异同.学习的话选择最新的 python 3.7.1版. ...

  9. Spring ApplicationContext(二)环境准备

    Spring ApplicationContext(二)环境准备 Spring 系列目录(https://www.cnblogs.com/binarylei/p/10198698.html) 本节介绍 ...

  10. Ionic学习

    1. 原来Http不能直接加在普通类里,下面的报错 import { Component } from '@angular/core'; import { NavController } from ' ...