string - 如何创建静态 C 字符串?

标签 string static rust ffi

我想在 Rust 中创建一个插件模块(共享库),它导出一个包含静态 C 字符串的 C 兼容结构。 2014年9月,this Stack Overflow question确定这是不可能的。截至 2015 年 1 月,根据 this Reddit thread 这仍然是不可能的.自那以后有什么变化吗?

最佳答案

以下似乎可以解决问题。我真的不希望该结构可变,但如果我不将其标记为 mut,我会收到 core::marker::Sync 错误。

extern crate libc;

use libc::funcs::c95::stdio::puts;
use std::mem;

pub struct Mystruct {
    s1: *const u8,
    s2: *const u8,
}

const CONST_C_STR: *const u8 = b"a constant c string\0" as *const u8;

#[no_mangle]
pub static mut mystaticstruct: Mystruct = Mystruct {
    s1: CONST_C_STR,
    s2: b"another constant c string\0" as *const u8
};

fn main() {
    unsafe{
        puts(mystaticstruct.s1 as *const i8); // puts likes i8
        puts(mystaticstruct.s2 as *const i8);
        println!("Mystruct size {}", mem::size_of_val(&mystaticstruct));
    }
}

输出(在 64 位 linux 上)是 ...

a constant c string
another constant c string
Mystruct size 16

关于string - 如何创建静态 C 字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29563785/

相关文章:

rust - Rust 中的显式部分数组初始化

rust - 如何在 Rust 中将字符串转换为整数?

string - 如何将字符串解析为以逗号作为小数分隔符的 float

objective-c - iOS NSString stringWithUTF8String/NSString initWithCString 错误utf8解码

c++ - 即使我可以访问单个元素,也不在 C++ 中的字符串类数组中打印任何内容

JAVA 用于创建所有可能的单词组合

java - 如何将字符串切成两部分并将子字符串传递给不同的函数?

c# - 读取派生类的属性值

Python - 附加到在 for 循环内声明的对象列表

arrays - 在 Struts 2 中将字符串数组作为静态参数传递