String 比较[c_char;N]与给定硬编码字符串的惯用方法
我正在迭代一组类型为String 比较[c_char;N]与给定硬编码字符串的惯用方法,string,rust,ffi,String,Rust,Ffi,我正在迭代一组类型为[C_char;256]的以null结尾的C字符串,必须将它们与一些硬编码的值进行比较,结果是出现以下异常情况: 每个(|扩展)的可用_实例_扩展.iter(){ 如果不安全{CStr::from_ptr(extension.extension_name.as_ptr())} .to_str() .unwrap() ==“VK_KHR_获取物理设备属性2” { 日志::信息!(“明白了!”); } }); 有什么惯用且明智的方法可以做到这一点吗?您可以使用以下方法创建字符串
[C_char;256]
的以null结尾的C字符串,必须将它们与一些硬编码的值进行比较,结果是出现以下异常情况:
每个(|扩展)的可用_实例_扩展.iter(){
如果不安全{CStr::from_ptr(extension.extension_name.as_ptr())}
.to_str()
.unwrap()
==“VK_KHR_获取物理设备属性2”
{
日志::信息!(“明白了!”);
}
});
有什么惯用且明智的方法可以做到这一点吗?您可以使用以下方法创建字符串:
CStr::from_bytes_with_numl(b“VK_KHR_get_physical_device_properties 2\0”)
.unwrap();
此外,不安全变量:
不安全{
CStr::从未选中的字节(b“VK\u KHR\u获取物理设备属性2\0”)
};
但我建议使用板条箱,这将允许更快和更短的代码:
使用cstr::cstr;
让result=unsafe{CStr::from_bytes_,未选中_num_(&extension.extension_name[…]);
让我们期待=cstr!(“VK_KHR_get_physical_device_Properties 2”);
断言!(预期结果);
您最新的编辑使用了CStr::from_bytes_,未选中
与以下错误不兼容:expected&[u8],found&[i8;256]
因此我仍然坚持使用from_ptr
并与CStr的结果进行比较
@ChristianIvicevic只要继续使用from\u ptr
,同样的,和extension.extension\u name[…]
应该可以工作。如果没有MCVE,就很难做出一个可编译的答案。啊,添加[…]
可能会起作用,我稍后会检查。