fn func(s: *mut String, a: *mut i32) -> usize {
println!("{}", unsafe { *s });
println!("{}", unsafe { *a });
unsafe { (*s).len() }
}
fn main() {
let mut s = String::from("hello");
let mut a = 10;
func(&mut s, &mut a);
}
위의 코드는 오류와 함께 실패합니다문자열에 대한 원시 포인터와 i32에 대한 원시 포인터를 역 참조하는 것의 차이점은 무엇입니까?
error[E0507]: cannot move out of dereference of raw pointer
--> src/main.rs:2:29
|
2 | println!("{}", unsafe { *s });
| ^^ cannot move out of dereference of raw pointer
이 왜 i32
에 대한 String
하지위한 일이 무엇입니까? 왜 그것이 "이동"을 불평합니까?
* 왜 "이동"을 불평합니까 * - "이동"이 Rust에서 무엇을 의미하는지 모를 경우 아직 원시 포인터를 사용하지 않아야합니다 *. 돌아가서 전체 입문서 [* The Rust Programming Language *] (https://doc.rust-lang.org/book/secondededition/)를 다시 읽으십시오. – Shepmaster
'std :: ptr :: read '원시 문자열 데이터를 복사하지만 쉽게 정의되지 않은 동작이 발생할 수 있습니다. – CodesInChaos