本文简要介绍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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。