gpt4 book ai didi

c - 是否可以将数组从 Rust 传递到 C?

转载 作者:太空宇宙 更新时间:2023-11-03 23:39:34 26 4
gpt4 key购买 nike

我有一个非常基本的 Rust 函数,可以很好地编译:

use std;
use std::ffi::CString;
use std::os::raw::c_char;

#[no_mangle]
pub extern "C" fn string_from_rust() -> [*const c_char; 2] {
let s = CString::new("Hello").unwrap();
let t = CString::new("World").unwrap();
let p = s.as_ptr();
let w = t.as_ptr();
std::mem::forget(s);
std::mem::forget(t);

[p, w]
}

在我的 C 头文件中我包含

#include <stdint.h>
extern char * string_from_rust();

string_from_rust() 只返回“Hello”,所以我似乎做错了什么,大概是在 C 中,它只允许将 Rust 数组的第一个元素传递给 C。

最佳答案

C ABI 没有“返回数组”的概念。你应该分配一个 Vec<*const c_char>并返回,将C端的函数定义为extern char** string_from_rust() .

或者,由于您要返回两个指针,因此使用 #[repr(C)]具有两个成员而不是数组的结构。

关于c - 是否可以将数组从 Rust 传递到 C?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49591678/

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