我无法找到 ffi::CString 连接的方法,所以我执行了以下操作:
// c_str1: CString
// c_str2: CString
...
let str1 = c_str1.to_str().unwrap();
let str2 = c_str2.to_str().unwrap();
let concatenated = str1.to_owned() + str2;
...
但我的解决方案看起来不像是惯用的解决方案。您能否建议是否有更好的串联解决方案?
CString
表示字节字符串,而不是像 str
这样的 Unicode 字符串,因此实现 generic CString
连接的更正确方法是:
use std::ffi::{CString, CStr};
fn strcat(start: CString, end: &CStr) -> CString {
let mut concatenation = start.into_bytes();
concatenation.extend_from_slice(end.to_bytes_with_nul());
CString::from_vec_with_nul(concatenation).unwrap()
}