当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Rust CString.from_raw用法及代码示例


本文简要介绍rust语言中 std::ffi::CString.from_raw 的用法。

用法

pub unsafe fn from_raw(ptr: *mut c_char) -> CString

重新获得通过 CString::into_raw 转移给 C 的 CString 的所有权。

此外,字符串的长度将从指针重新计算。

安全性

只能使用先前通过调用 CString::into_raw 获得的指针来调用它。其他用法(例如,尝试获取由外部代码分配的字符串的所有权)可能会导致未定义的行为或分配器损坏。

应该注意的是,长度不仅仅是“recomputed,”,而是重新计算的长度必须与 CString::into_raw 调用的原始长度相匹配。这意味着在将字符串传递给可以修改字符串长度的 C 函数时,不应使用 CString::into_raw /from_raw 方法。

注意:如果您需要借用外部代码分配的字符串,请使用std::ffi::CStr.如果您需要获得由外部代码分配的字符串的所有权,您将需要制定自己的规定以适当地释放它,可能使用外部代码的 API 来执行此操作。

例子

创建一个 CString ,将所有权传递给 extern 函数(通过原始指针),然后使用 from_raw 重新获得所有权:

use std::ffi::CString;
use std::os::raw::c_char;

extern "C" {
    fn some_extern_function(s: *mut c_char);
}

let c_string = CString::new("Hello!").expect("CString::new failed");
let raw = c_string.into_raw();
unsafe {
    some_extern_function(raw);
    let c_string = CString::from_raw(raw);
}

相关用法


注:本文由纯净天空筛选整理自rust-lang.org大神的英文原创作品 std::ffi::CString.from_raw。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。