我记得有一个函数array_each
,但现在已经弃用了。这被另一个功能取代了吗?如果没有,我如何将数组的C指针用作生锈数组呢?
extern {
fn testing() -> *MyList
}
#[repr(C)]
struct MyList;
fn main() {
unsafe {
let list = testing();
// would like to iterate through the list here
}
}
答案 0 :(得分:3)
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
之后的*
。)