update string.md

This commit is contained in:
sunface
2022-03-07 13:58:52 +08:00
parent d7fdc0c3c2
commit e0bcc6c897
4 changed files with 62 additions and 1 deletions

View File

@ -136,4 +136,32 @@ fn main() {
println!("Success!")
}
```
7.
```rust
use std::mem;
fn main() {
let story = String::from("Rust By Practice");
// Prevent automatically dropping the String's data
let mut story = mem::ManuallyDrop::new(story);
let ptr = story.as_mut_ptr();
let len = story.len();
let capacity = story.capacity();
// story has nineteen bytes
assert_eq!(16, len);
// We can re-build a String out of ptr, len, and capacity. This is all
// unsafe because we are responsible for making sure the components are
// valid:
let s = unsafe { String::from_raw_parts(ptr, len, capacity) };
assert_eq!(*story, s);
println!("Success!")
}
```