我有一个
const std::vector<char>
- not 空终止。我想使用 fmt 库打印它,而不复制矢量。
我希望指定精度就足够了,但是 fmt 文档 说:
请注意,即使指定了精度,C 字符串也必须以 null 结尾。
好吧,我的不是。我必须复制并用
\0
填充它,还是我可以做其他事情?
如果你可以升级到 C++17,那么你可以使用 strig 视图参数而不是指向 char 的指针:
const std::vector<char> v;
std::string_view sv(v.data(), v.size());
fmt::format("{}", sv);
tl;博士:
std::cout << fmt::format("{}", fmt::string_view{v.data(), v.size()});
所以,fmt 接受两种“字符串”:
std::string
-like - 数据+长度。自 C++17 起,C++ 正式拥有引用类型,
std::string
-like string view 类,它可以引用您的字符向量。 (不复制任何东西)-fmt
可以打印这些。问题是,你可能不在 C++17 中。但是 fmt
本身也必须在内部面对这个问题,所以它实际上 让你覆盖 - 在任何版本的标准中你都可以让 fmt 本身编译,特别是 C++14:
const std::vector<char> v;
fmt::string_view sv(v.data(), v.size());
auto str = fmt::format("{}", sv);
std::cout << str;
感谢@eerorika 让我想到了字符串视图。