fmt 库的 output_file 的诡异行为

作者: , 共 442 字 , 共阅读 0

C++的fmt::format格式化库,由于效率高,功能强大,相关的 API 已经进入C++20,但其文档和 API 细节无法恭维。

比如下面这段代码来自 https://github.com/fmtlib/fmt,号称速度比fprintf要快 5 到 10 倍:

int main() {
  auto out = fmt::output_file("guide.txt");
  out.print("Don't {}", "Panic");
}

猜猜如果guide.txt里面有内容时会发生什么,删除文件重写还是续写?都不是,答案是从头开始覆盖写入。这意味着,如果文件原内容比要写的内容更长,文件就变成写入内容,再加上原内容剩下部分。

是不是很奇葩呀?关键是你在官方文档里还找不到output_file的任何信息( 2020 年 11 月 02 日)。在源代码里也没有该函数的帮助信息(只能看源实现代码)。

Q. E. D.

类似文章:
编程 » C++, fmt
最近遇到一个诡异的问题,一个程序经常卡死。最后定位到 fmt 和下面简单的例子:
编程 » C++, log
先编译 libfmt.a :
编程 » C++, popen
popen函数可以获取比std::system函数更详细的程序输出。只是正常调用 popen 只能获取 stdout 的输出,而 stderr 的输出被忽略。
Excel 的数据透视表是一个很好用的功能,我写了一个 Matlab 版本,在处理上和 Excel 的透视表差不多,还差一个 filter 而已。
std::thread是 C++ 11 新引入的标准线程库。在同样是 C++ 11 新引入的 lambda 函数的辅助下,std::thread用起来特别方便:
获取程序占用的内存量,是一个诡异的需求。但程序写多了,有时候还真需要,尤其是代码运行出现问题的时候。
IT » Ubuntu
最近一台 ubuntu 服务器经常出现磁盘不足的情况,删除部分空间后,过一段时间空间又会不足。粗略估计每小时降低 4G。
相似度: 0.051
编程 » C++, GCC, 编译链接
C++的链接分为两部分,一个是编译时,一个是运行时。但运行时的行为也收到编译参数的影响。
编程 » C++, 编译
一个典型的 GCC C++编译过程为:
编程 » C++
现在一般不能用 sprintf 和 strcpy ,推荐使用 snprintf 和 strncpy ,以防止缓冲区溢出: