除了最常见的(格式)函数之外,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。但我想要一个适用于多个参数的解决方案。
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