Ich arbeite in einer FFI-Bibliothek und habe dieses Muster schon einige Male angetroffen, dass ich nicht weiß, wie man idiomatisch damit umgeht.Rust, FFI und Lebensdauer für String Transmutation
impl CanVoidStar for str {
fn as_cvoid_ptr(&self) -> *const c_void {
let string = CString::new(self).unwrap();
unsafe {
return mem::transmute(string.as_ptr());
}
}
}
Meine Absicht war es, einen const *void
Zeiger auf ein Stück Erinnerung zu schaffen, die ich auf eine C-Funktion der Hand von kann. Das Problem, dass hier ist string
geht aus dem Geltungsbereich und damit bekomme ich undefiniertes Verhalten im unsafe
Block.
Gibt es eine Möglichkeit, die ich string
auf dem Heap reserviert haben, bis was es ist, das den Rückgabewert damit getan wird? Gibt es einen idiomatischen Weg, um damit umzugehen, oder muss ich meine Algorithmen neu gestalten?
http://jakegolding.com/rust-ffi-omnibus/ – Shepmaster