私は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());
}
}
}
私の意図は、私はC関数に引き渡すことができ、メモリの一部にconst *void
ポインタを作成することでした。ここではstring
が範囲外になり、したがってunsafe
ブロックで未定義の動作が発生するという問題があります。
ヒープ上にstring
を割り当てることができる方法はありますか?返された値を使用しているものは何ですか?さらに、これを処理するための慣用的な方法があるのでしょうか、アルゴリズムを再設計する必要がありますか?
http://jakegoulding.com/rust-ffi-omnibus/ – Shepmaster