强制 format_to_n 使用终止零

NoS*_*tAl 2 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);
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

Bar*_*rry 5

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

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

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