本文简要介绍rust语言中 std::ffi::CStr.as_ptr
的用法。
用法
pub const fn as_ptr(&self) -> *const c_char
返回指向此 C 字符串的内部指针。
返回的指针将在 self
有效的时间内有效,并指向以 0 字节终止的连续内存区域,以表示字符串的结尾。
WARNING
返回的指针是只读的;写入它(包括将它传递给写入它的 C 代码)会导致未定义的行为。
您有责任确保不会过早释放底层内存。例如,当 ptr
在 unsafe
块内使用时,以下代码将导致未定义的行为:
use std::ffi::CString;
let ptr = CString::new("Hello").expect("CString::new failed").as_ptr();
unsafe {
// `ptr` is dangling
*ptr;
}
发生这种情况是因为 as_ptr
返回的指针不携带任何生命周期信息,并且在计算 CString::new("Hello").expect("CString::new failed").as_ptr()
表达式后立即释放 CString
。要解决此问题,请将 CString
绑定到局部变量:
use std::ffi::CString;
let hello = CString::new("Hello").expect("CString::new failed");
let ptr = hello.as_ptr();
unsafe {
// `ptr` is valid because `hello` is in scope
*ptr;
}
这样,hello
中 CString
的生命周期就包含了ptr
和unsafe
块的生命周期。
相关用法
- Rust CStr.into_c_string用法及代码示例
- Rust CStr.from_bytes_with_nul用法及代码示例
- Rust CStr.from_bytes_with_nul_unchecked用法及代码示例
- Rust CStr.from_ptr用法及代码示例
- Rust CStr.to_bytes用法及代码示例
- Rust CStr.to_str用法及代码示例
- Rust CStr.to_string_lossy用法及代码示例
- Rust CStr.to_bytes_with_nul用法及代码示例
- Rust CString.into_bytes用法及代码示例
- Rust CString.from_raw用法及代码示例
- Rust CString.into_boxed_c_str用法及代码示例
- Rust CStr用法及代码示例
- Rust CString.into_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用法及代码示例
- Rust CString.into_bytes_with_nul用法及代码示例
- Rust CString.as_bytes_with_nul用法及代码示例
- Rust CString.new用法及代码示例
- Rust CString.into_string用法及代码示例
- Rust Cursor.new用法及代码示例
- Rust Condvar.notify_all用法及代码示例
注:本文由纯净天空筛选整理自rust-lang.org大神的英文原创作品 std::ffi::CStr.as_ptr。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。