كيفية تحويل سلسلة 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 بطول معروف.