我正在FFI庫中工作,並且遇到過這種模式,我不知道如何處理地道。鐵鏽,FFI和字符串轉換的生命期
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());
}
}
}
我的意圖是要建立一個const *void
指針一塊內存,我可以換手至C函數。這裏的問題是string
超出了範圍,因此我在unsafe
塊中出現未定義的行爲。
有沒有一種方法可以在堆上分配string
,直到它使用返回值完成它爲止?此外,有沒有一種慣用的方式來處理這個問題,還是我需要重新設計我的算法?
http://jakegoulding.com/rust-ffi-omnibus/ – Shepmaster