当缓冲区大小不足时,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完成这个操作?