我无法找到 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;
...
但我的解决方案看起来不太符合惯用方式。您能否建议是否有更好的连接解决方案?
我无法找到 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
s 表示字节字符串而不是像 这样的 Unicode 字符串,因此实现通用str
连接的更正确的方法是:CString
操场
这绝不会引起逻辑错误(将最后一行替换为是正确的
unsafe { CString::from_vec_with_nul_unchecked(concatenation) }
) - 换句话说,它是一个完整的函数,这很好 - 并且对只读参数(&CStr
引用而不是CString
)施加了最低的要求,同时通过获取所有权仍然很高效start
。