gpt4 book ai didi

c - 处理 C 的 Null 终止指针 (ffi)

转载 作者:太空宇宙 更新时间:2023-11-04 07:13:27 24 4
gpt4 key购买 nike

我记得有一个函数 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),所以在将该切片暴露在安全的外部时要小心。

(注意:您的原始代码使用了一些旧语法,我已在此答案中修复了这些语法。例如,您需要 constmut 之后 * 现在。)

关于c - 处理 C 的 Null 终止指针 (ffi),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26602012/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com