#string #c #helper #nul #byte #byte-string #macro

已废弃 c_string

Rust 的 C 字符串辅助工具

15 个版本

0.7.2 2021年4月5日
0.7.1-已废弃2017年12月20日
0.7.0 2015年4月4日
0.6.2 2015年3月27日

#3#nul

每月下载 28 次

Apache-2.0/MIT

18KB
331

Rust 的 C 字符串辅助工具

Maintenance Status

废弃通知

此包不再维护。如果您只使用它来使用 c_str! 宏,请考虑切换到 c_str_macrobyte-strings


lib.rs:

此库提供用于与 FFI 调用一起使用创建和管理空终止字符串的辅助工具。大多数 C API 要求传递给它们的字符串是空终止的,其中许多分配并返回空终止字符串,但 Rust 的内置字符串类型 不是 空终止的。

将 Rust 字符串转换为 C 字符串的另一个问题是,Rust 字符串可以在字符串中间有效包含一个空字节(0 是一个有效的 Unicode 代码点)。这意味着并非所有 Rust 字符串都可以实际转换为 C 字符串。

管理由外部分配的 C 字符串

通过类型 OwnedCString 管理分配的 C 字符串。此类型的值“拥有”内部字符缓冲区,并在值被丢弃时调用析构函数。

C 字符串的创建

类型 CStrBuf 用于将 Rust 字符串数据适配到调用期望空终止字符串的 C 函数。CStrBuf 的转换构造函数提供生成 C 字符串的多种方式,但由于上述某些限制,转换可能会失败。

借用 C 字符串

无论是 OwnedCString 还是 CStrBuf,都委派到 std::ffi::CStr,这是一个无大小类型,当通过引用传递或返回时,会断言 C 字符串要求。&CStr 可用于在安全的伪装下封装 FFI 函数。

创建和使用 C 字符串的示例


extern crate c_string;
extern crate libc;

use c_string::CStrBuf;
use std::ffi::CStr;

fn safe_puts(s: &CStr) {
    unsafe { libc::puts(s.as_ptr()) };
}

fn main() {
    let my_string = "Hello, world!";

    // Allocate the C string with an explicit local that owns the string.
    // The string will be deallocated when `my_c_string` goes out of scope.
    let my_c_string = match CStrBuf::from_str(my_string) {
            Ok(s) => s,
            Err(e) => panic!(e)
        };

    safe_puts(&my_c_string);
}

依赖关系

~43KB