使用类型`[my_struct]`将C结构数组传递给Rust函数的正确方法?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用类型`[my_struct]`将C结构数组传递给Rust函数的正确方法?相关的知识,希望对你有一定的参考价值。

C档案:

typedef struct point {
    int x;
    int y;
} point;

typedef struct points {
    int count;
    point *array_of_points;
} points;

锈文件:

#[derive(Debug)]
#[repr(C)]
pub struct point {
    x: c_int,
    y: c_int,
}

#[derive(Debug)]
#[repr(C)]
pub struct points {
    count: c_int,
    array_of_points: [point],
}

#[no_mangle]
pub fn do_something(all_points: &points) {
    for i in 0..all_points.count {
        let crr_point = &all_points.array_of_points[i as usize];
        println!("{:?}", crr_point);
    }
}

在我的C文件中,我分配了很多结构点并将它们添加到array_of_points,然后我调用do_something函数。

如何在Rust中的array_of_points获得每个单点?

我是否正确定义了Rust中的array_of_points数组?

当我运行它时,会出现这种奇怪的结果:

point { x: 0, y: -952095696 }   
point { x: 32674, y: 101 }   

等等。

以上是关于使用类型`[my_struct]`将C结构数组传递给Rust函数的正确方法?的主要内容,如果未能解决你的问题,请参考以下文章

C++ 从 DLL 创建结构

为啥不允许将数组按值传递给 C 和 C++ 中的函数?

使用 c++/vC++ 将结构数组和二维数组传递给函数

如何将结构数组从 c++ 传递到 c#?

填充是不是曾经添加到这个 C 结构中? [复制]

pyspark:将结构分解成列