我记得有一个函数array_each
,但现在已经弃用了。这是用另一个功能取代的吗?如果没有,我如何将指向数组的C指针用作rust数组?
extern {
fn testing() -> *MyList
}
#[repr(C)]
struct MyList;
fn main() {
unsafe {
let list = testing();
// would like to iterate through the list here
}
}
使用std::slice::from_raw_parts
:
extern {
fn get_some_list(len: *mut u32) -> *mut u32;
}
fn main() {
use std::slice;
unsafe {
let mut len: u32 = 0;
let ptr: *mut u32 = get_some_list(&mut len);
assert!(!ptr.is_null());
let view: &[u32] = slice::from_raw_parts(ptr, len as usize);
for &v in view.iter() { println!("{}", v); }
}
}
生成的切片可能具有任意的寿命(包括'static
),因此要小心将该切片暴露在安全的外部。
(注意:您的原始代码使用了一些旧语法,我在这个答案中已经修复了这些语法。例如,您现在需要在*
之后使用const
或mut
。)