#微码分享#C++变参字符串格式化函数format_string
在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的更多相关文章
- PHP中常用的字符串格式化函数总结
注意:在PHP中提供的字符串函数处理的字符串,大部分都不是在原字符串上修改,而是返回一个格式化后的新字符串. 一.取出空格和字符串填补函数 空格也是一个有效的字符,在字符串中也会占据一个位置.用户在表 ...
- php课程 6-22 字符串格式化函数有哪些(精问)
php课程 6-22 字符串格式化函数有哪些(精问) 一.总结 一句话总结: 1.猜测一下$_GET()怎么来的? 函数赋值给变量的操作:$_YZM=get(); 这样就可以很好的解释哪些全局变量 ...
- JS字符串格式化函数 string.format
原生JS写的仿C#的字符串format函数,在此基础上又增加了便于JS使用的字面量对象参数. 参照C#中的规则,调用的时候会检测字符串格式,如果字符串格式不规范,或者传入的参数为null或undefi ...
- 强大的字符串格式化函数 - format
自python2.6开始,新增了一种格式化字符串的函数str.format(),它通过{}和:来代替% 位置方法格式化 >>>'{}-{}'.format('simon','ting ...
- php中常用的字符串格式化函数
ltrim():从字符串左删除空格或其他预定义字符串 rtrim():从字符串的末端开始删除空白字符串或其它预定义字符 trim():从字符串的两端删除空白字符和其他预定字符 str_pad():把字 ...
- php字符串格式化函数addslashes()
1.这个函数的使用和php.ini中的magic_quotes_gpc的配置有关,默认情况下,这个配置为on.并且,这个配置处于一个较高级别,脚本中不能修改.所以,检测这个配置情况就很重要. 2.在脚 ...
- PHP常用字符串操作函数实例总结(trim、nl2br、addcslashes、uudecode、md5等)
/*常用的字符串输出函数 * * echo() 输出字符串 * print() 输出一个或多个字符串 * die() 输出一条信息,并退出当前脚本 * printf() 输出格式化字符串 * spri ...
- PHP内置的字符串处理函数
字符串的特点 1.其他类型的数据用在字符串类型处理函数中,会自动将其转化成字符串后,在处理 <?php echo substr("abcdefghijklmn",2,4 ...
- PHP字符串格式化特点和漏洞利用点
转载至: https://www.anquanke.com/post/id/170850 PHP中的格式化字符串函数 在PHP中存在多个字符串格式化函数,分别是printf().sprintf().v ...
随机推荐
- go语言使用go-sciter创建桌面应用(七) view对象常用方法,文件选择,窗口弹出,请求
view对象的详细文档请看: https://sciter.com/docs/content/sciter/View.htm demo9.html代码如下: <!DOCTYPE html> ...
- [z]规则引擎
https://www.ibm.com/developerworks/cn/java/j-drools/ 使用声明性编程方法编写程序的业务逻辑 使用规则引擎可以通过降低实现复杂业务逻辑的组件的复杂性, ...
- DataStructure.BloomFilter
Bloom Filters Ref[1] 1. 简介 Bloom filter(布隆过滤器:有更好的或正确的翻译,告诉我) 是一个数据结构,该数据结构快速并且内存高效,它可以告诉你某个元素是否在集合中 ...
- Generate a Push Certificate
To send Push notification to an application/device couple you need an unique device token (see the O ...
- delphi sdk 函数个数知多少?
pascal用了这么久 那么您知道他有多少个函数,过程? 笔者统计了一下, delphi 7 21579个delphi xe2 41145个lazarus 1.12 70987个 ==== ...
- Java中的逆变与协变 很直接不饶弯的讲出来了
```java 协变 extends只能new 辈分比自己低的家伙 List<? extends Number> list001 = new ArrayList<Integer> ...
- JavaScript调用wcf服务,并且处理返回的字典集合
1.第一步创建wcf服务的方法 using System;using System.Collections.Generic;using System.Linq;using System.Runtime ...
- redis 和 kookeeper 连用 构建 redis集群
转载地址:https://www.zhihu.com/question/62598701
- 【Git】 GitLab服务器社区版安装与配置
GitLab简介 GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务 GitLab系统架构 当~git在图片中引用时,它表示git用户的主目录 ...
- [Office]Execl取消保护密码
2007版Excel表格中可以按照以下方式建宏: 打开Excel表格中的Excel选项,选择自定义,得到如下画面: 然后在左边侧框栏中选择“查看宏”或者Alt+F11 之后双击或者选择添加按钮,则可 ...