當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。