本文簡要介紹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 CString.into_bytes用法及代碼示例
- Rust CString.into_boxed_c_str用法及代碼示例
- Rust CString.into_bytes_with_nul用法及代碼示例
- Rust CString.into_string用法及代碼示例
- Rust CString.from_raw用法及代碼示例
- Rust CString.as_c_str用法及代碼示例
- Rust CString.from_vec_unchecked用法及代碼示例
- Rust CString.from_vec_with_nul_unchecked用法及代碼示例
- Rust CString.from_vec_with_nul用法及代碼示例
- Rust CString.as_bytes用法及代碼示例
- Rust CString.as_bytes_with_nul用法及代碼示例
- Rust CString.new用法及代碼示例
- Rust CString用法及代碼示例
- Rust CStr.into_c_string用法及代碼示例
- Rust CStr.from_bytes_with_nul用法及代碼示例
- Rust CStr.from_bytes_with_nul_unchecked用法及代碼示例
- Rust CStr用法及代碼示例
- Rust CStr.from_ptr用法及代碼示例
- Rust CStr.to_bytes用法及代碼示例
- Rust CStr.as_ptr用法及代碼示例
- Rust CStr.to_str用法及代碼示例
- Rust CStr.to_string_lossy用法及代碼示例
- Rust CStr.to_bytes_with_nul用法及代碼示例
- Rust Cursor.new用法及代碼示例
- Rust Condvar.notify_all用法及代碼示例
注:本文由純淨天空篩選整理自rust-lang.org大神的英文原創作品 std::ffi::CString.into_raw。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。