You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用libfmt多次输出内容到内存缓冲区并转换为字符串?

使用libfmt多次格式化内容到内存缓冲区并转为字符串

其实你提到的fmt::memory_buffer就是你要找的内存缓冲区类型,只是用法和你预想的略有不同——它本身没有print成员函数,但可以配合fmt::print的重载来实现多次追加内容的需求,完全符合你的场景。

直接给你看示例代码:

#include <fmt/core.h>
#include <fmt/format.h>
#include <string>

int main() {
    // 创建内存缓冲区对象
    fmt::memory_buffer buf;

    // 多次往缓冲区写入格式化内容
    fmt::print(buf, "Hello, {}!\n", "Libfmt");
    fmt::print(buf, "Current count: {}\n", 1);
    fmt::print(buf, "Precision example: {:.3f}\n", 2.71828);

    // 将缓冲区内容转换为std::string
    std::string final_str = fmt::to_string(buf);

    // 输出验证(也可以直接使用final_str做其他操作)
    fmt::print("{}", final_str);
    return 0;
}

关键说明:

  • fmt::memory_buffer是libfmt内置的动态内存缓冲区,会自动管理内存扩容,不需要手动分配空间。
  • 虽然没有buf.print(...)这种写法,但fmt::print提供了接受fmt::memory_buffer&作为第一个参数的重载,作用就是把格式化后的内容追加到缓冲区里,完美替代你预想的成员函数调用。
  • 最后用fmt::to_string把缓冲区的二进制内容转换成标准std::string,这个函数会自动处理字符编码(默认是UTF-8),无需手动拷贝字节。
  • 如果需要复用缓冲区,调用buf.clear()就能清空已有内容,重新写入新的格式化数据。

内容的提问来源于stack exchange,提问作者Simon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 15:29:08