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


Rust CString.into_raw用法及代码示例


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

用法

pub fn into_raw(self) -> *mut c_char

使用 CString 并将字符串的所有权转移给 C 调用者。

该函数返回的指针必须返回到 Rust 并使用std::ffi::CString.from_raw进行适当的解除分配。具体来说,人们应该不是使用标准Cfree()函数来释放该字符串。

未能调用 CString::from_raw 将导致内存泄漏。

C端必须不是修改字符串的长度(通过编写null字符串内的某处或删除最后一个),然后使用std::ffi::CString.from_raw。请参阅中的安全部分std::ffi::CString.from_raw.

例子

use std::ffi::CString;

let c_string = CString::new("foo").expect("CString::new failed");

let ptr = c_string.into_raw();

unsafe {
    assert_eq!(b'f', *ptr as u8);
    assert_eq!(b'o', *ptr.offset(1) as u8);
    assert_eq!(b'o', *ptr.offset(2) as u8);
    assert_eq!(b'\0', *ptr.offset(3) as u8);

    // retake pointer to free memory
    let _ = CString::from_raw(ptr);
}

相关用法


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