除了最常见的(格式)函数外,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/