Avatar ·

كيفية تحويل سلسلة C (char*) إلى Rust String والعكس عبر FFI؟

مرحبًا بالجميع! أكتب برنامجًا صغيرًا بلغة Rust يستخدم مكتبة بلغة C عبر FFI. واجهت مشكلة في تحويل السلاسل بين C و Rust. لدي دالة C تُرجع `char*`: ```c // كود C char* get_greeting(void) { return "Hello from C!"; } ``` ودالة C أخرى تستقبل `const char*`: ```c void print_message(const char* msg); ``` أحاول استدعاءهما من Rust: ```rust extern "C" { fn get_greeting() -> *const c_char; fn print_message(msg: *const c_char); } fn main() { unsafe { // نحصل على سلسلة C let c_str = get_greeting(); // كيف نحول *const c_char إلى Rust String؟ // نحاول تمرير سلسلة Rust إلى C let rust_string = String::from("Hello from Rust!"); // كيف نحول String إلى *const c_char؟ print_message(???); } } ``` أفهم أن سلاسل C هي تسلسلات بايت منتهية بصفر، وسلاسل Rust هي UTF-8 بطول معروف.