当缓冲区大小不足时,write!
似乎不写参数.
use std::fmt::Write;
use arrayvec::ArrayString; // 'arrayvec' crate
fn main() {
const SIZE: usize = 16;
let mut s = ArrayString::<SIZE>::new();
match write!(s, "{}{}", "0123456789", "0123456789") {
Ok(_) => println!("success!"),
Err(err) => println!("{}", err),
}
println!("{}", s);
}
输出:
an error occurred when formatting an argument
0123456789
但是,我希望尽可能长地编写格式化字符串,直到缓冲区大小.在上面的例子中,我想要的输出是0123456789012345
.
在C语言中,我们可以使用snprintf
来实现这一点.
#include <stdio.h>
#include <stdlib.h>
int main() {
char buf[16];
snprintf(buf, 16, "%s%s", "0123456789", "0123456789");
printf("%s\n", buf); // output is "012345678901234", due to '\0'
}
我怎么能在 rust 迹斑斑的地方做到这一点?