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


Rust String.from_raw_parts用法及代碼示例


本文簡要介紹rust語言中 std::string::String.from_raw_parts 的用法。

用法

pub unsafe fn from_raw_parts(    buf: *mut u8,     length: usize,     capacity: usize) -> String

根據長度、容量和指針創建一個新的 String

安全性

由於未檢查的不變量的數量,這是非常不安全的:

  • buf 處的內存需要由標準庫使用的同一個分配器先前分配,並且所需的對齊正好為 1。
  • length 需要小於或等於 capacity
  • capacity 必須是正確的值。
  • buf 的第一個 length 字節需要是有效的 UTF-8。

違反這些可能會導致諸如破壞分配器的內部數據結構之類的問題。

buf 的所有權有效地轉移到String,然後可以隨意釋放、重新分配或更改指針指向的內存內容。確保調用此函數後沒有其他任何東西使用該指針。

例子

基本用法:

use std::mem;

unsafe {
    let s = String::from("hello");

    // Prevent automatically dropping the String's data
    let mut s = mem::ManuallyDrop::new(s);

    let ptr = s.as_mut_ptr();
    let len = s.len();
    let capacity = s.capacity();

    let s = String::from_raw_parts(ptr, len, capacity);

    assert_eq!(String::from("hello"), s);
}

相關用法


注:本文由純淨天空篩選整理自rust-lang.org大神的英文原創作品 std::string::String.from_raw_parts。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。