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


Rust CStr.as_ptr用法及代码示例


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

用法

pub const fn as_ptr(&self) -> *const c_char

返回指向此 C 字符串的内部指针。

返回的指针将在 self 有效的时间内有效,并指向以 0 字节终止的连续内存区域,以表示字符串的结尾。

WARNING

返回的指针是只读的;写入它(包括将它传递给写入它的 C 代码)会导致未定义的行为。

您有责任确保不会过早释放底层内存。例如,当 ptrunsafe 块内使用时,以下代码将导致未定义的行为:

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 的生命周期就包含了ptrunsafe 块的生命周期。

相关用法


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