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

如何使用fmt库打印非空终止std::vector<char>且不拷贝数据

实现方案

不需要拷贝vector数据补\0,fmt原生支持零拷贝打印非空终止的字符序列:

  • 核心方法是使用fmt::string_view包装vector的内存指针和长度,该类型自带长度元信息,fmt处理时不会按照C字符串的规则检索空终止符,全程无额外数据拷贝:
const std::vector<char> vec; // 持有的非空终止字符vector
// 零拷贝传入打印
fmt::print("{}", fmt::string_view(vec.data(), vec.size()));
  • 需要限制输出长度时,直接在格式串中指定精度即可,不会触发越界读取:
// 仅输出前8个字符
fmt::print("{:.8}", fmt::string_view(vec.data(), vec.size()));

文档中提到的「指定精度也要求空终止」的规则,仅针对传入参数为原生const char*类型的C字符串场景,对自带长度信息的fmt::string_view、std::string_view类型参数不适用。
如果需要输出不可打印字符的十六进制值,直接搭配fmt的格式修饰符使用即可,同样不需要额外拷贝数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 08:30:47