c++ - 强制 format_to_n 使用终止零

标签 c++ c++20 fmt

除了最常见的(格式)函数外,C++20 还带有带有输出迭代器和计数的 format_to_n。

我正在寻找的是确保在空间不足的情况下我的字符串仍以零终止的方法。 例如,我希望以下程序输出 4 而不是 42。

#include<string>
#include<iostream>
#define FMT_HEADER_ONLY 
#include <fmt/format.h>
void f(char* in){
    fmt::format_to_n(in, 2,"{}{}", 42,'\0');
    std::cout << in;
}

int main(){
    char arr[]= "ABI";
    f(arr);
}

如果我不手动比较我提供给函数的写入字符数和最大长度,这是否可行?

如果您想知道为什么我使用“\0”作为参数:

我不知道如何将终止字符放入格式字符串中。

注意:我知道对于一个参数,我可以用 : 指定最大长度。但我想要一个适用于多个参数的解决方案。

最佳答案

format_to_n 返回一个结果。您可以使用该结构:

void f(char* in){
    auto [out, size] = fmt::format_to_n(in, 2, "{}", 42);
    *out = '\0';
    std::cout << in;
}

请注意,这可能会将 "42\0" 写入 in,因此请适当调整您的容量(2 用于缓冲区大小3 是正确的)。

关于c++ - 强制 format_to_n 使用终止零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60450200/

相关文章:

c++ - C++ fmt::print 与 fmt::format_to 命名的技术背景?

c++ - 将文件传递给构造函数以读取

c++ - 找出 OpenGL 中 C++ 类的步幅

c++ - 为什么标准将 borrowed_subrange_t 定义为 common_range?

c++ - 如何理解 "manifeSTLy constant-evaluated"的定义?

c++ - 使用 {fmt} 和 source_location 创建基于可变参数模板的日志功能

c++ - 如何使用 wchar_t 为 fmt 编写格式化程序?

c++ - 为什么 QCheckBox 的信号没有发出?

c++ - 重载 << 运算符以处理指向字符串的指针

std::transform_reduce 的 C++17 替代实现