我正在为 rust 迹写一个FFI包装.我见过libc::c_charstd::os::raw::c_char的用法.我想知道我的知识和C之间是否有极小的区别.如果我想通过cffi向Python公开字符串,我应该使用什么?

推荐答案

我无法回答哪个更惯用,但我可以说它们在64位Linux(大多数在线托管文档的默认平台)上是相同的:

std::os::raw::c_char:

type c_char = i8;

libc::c_char:

type c_char = i8;

在不同的平台上进行更广泛的研究有点复杂.标准图书馆有tightly groups all the definitions for c_char个,但有libc groups them by platform个.考虑到这种类型的基础,我希望它们在所有平台上都是一样的.

实际上,这两个定义都不可能改变,所以可能没有任何 solidity 差异.

我的意见是使用标准库版本中的一个,直到我需要使用libc中的特定内容,在这种情况下,我可能会将所有类型切换到libc变体,只是为了保持一致.

Rust相关问答推荐

在函数内定义impl和在函数外定义impl的区别

Box::new()会从一个堆栈复制到另一个堆吗?

MPSC频道在接收器处阻塞

在自定义序列化程序中复制serde(With)的行为

为什么这是&q;,而让&q;循环是无限循环?

在铁 rust 中传递所有权

可以为rust构建脚本编写单元测试吗?

如果死 struct 实现了/派生了一些特征,为什么Rust会停止检测它们?

循环访问枚举中的不同集合

为什么`str`类型可以是任意大小(未知大小),而`string`类型的大小应该是已知的?

如何使用Actix Web for Rust高效地为大文件服务

这个不安全的 Rust 代码有什么问题,所以它可以在 Windows 上运行,但不能在 Ubuntu 上运行?

为什么 js_sys Promise::new 需要 FnMut?

相当于 Rust 中 C++ 的 std::istringstream

如何获取模块树?

枚举的利基优化如何在 Rust 中工作?

如何在 Rust 的 Hyper 异步闭包中从外部范围正确读取字符串值

在空表达式语句中移动的值

Rust 为什么 (u32, u32) 的枚举变体的大小小于 (u64)?

如何在不设置精度的情况下打印浮点数时保持尾随零?