如何在Rust中通过指针返回值

elcex8rz  于 2023-04-30  发布在  其他
关注(0)|答案(1)|浏览(140)

我在理解如何创建一个可以“返回”给调用者的字符串而不违反生命周期方面遇到了麻烦。
我有一个简单的函数类型

pub extern fn get_string(file: &mut &mut String) -> i32

它应该创建一个字符串(以正确的方式分配),并通过file将其传递回调用者。我知道这是一个非常“C”的事情,Rust可以返回字符串,但这就是我在这里需要做的。
我需要一些帮助。我试过:

pub extern fn get_string(file: &mut &mut String) -> i32 {
    let my_str:String = "String passed in Rust.\n".to_owned();
    local_file = &mut &mut my_str_ptr;
    
    return 0;
}

但显然my_str是局部的,在函数结束后将无法生存。如何正确转移所有权?
在解决方案中,我可以根据自己的需要分配字符串(希望使用rust的String),但之后我确实需要通过指针传递引用。

qlzsbp2j

qlzsbp2j1#

我会这样做,但我不确定这样的赋值给&mut &mut String的意图。
如果filemain()中的&mut &mut s,则*file&mut s(i.即r)且**files

pub fn get_string(file: &mut &mut String) -> i32 {
    let my_str: String = "String passed in Rust.\n".to_owned();
    **file = my_str;
    return 0;
}

fn main() {
    let mut s = "original".to_owned();
    let mut r = &mut s;
    let i = get_string(&mut r);
    println!("i={:?} s={:?}", i, s);
}
/*
i=0 s="String passed in Rust.\n"
*/

相关问题