gpt4 book ai didi

rust - 如何在 Rust FFI 中发布常量字符串?

转载 作者:行者123 更新时间:2023-11-29 07:48:16 25 4
gpt4 key购买 nike

我想让 Rust 库向 C 公开一个 const char * 静态字符串,以与现有接口(interface)兼容(特别是 librsync )。即C头文件有

extern char const *my_string;

在 C 中,库将简单地拥有

char const *my_string = "hi";

在 Rust 中我尝试过类似的东西

pub static my_string: *const libc::c_char = unsafe { "hi\0" as *const libc::c_char };

但是这个提示

error: casting `&'static str` as `*const i8` is invalid

似乎我不能使用 CString 等,因为它们不是编译时常量表达式。

最佳答案

我们需要一个公共(public)的、静态的、未损坏的指针,指向一些以零结尾的字节:

#[export_name = "CONST_C_STR"] // or #[no_mangle]
pub static CONST_C_STR: &[u8; 20] = b"a constant c string\0";

这适用于一个简单的 C 程序:

#include <stdio.h>

extern char * CONST_C_STR;

int main(int argc, char *argv[]) {
printf("%s\n", CONST_C_STR);
}

关于rust - 如何在 Rust FFI 中发布常量字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33850189/

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