You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Rust中通过指针返回字符串且不违反生命周期规则?

解决Rust中通过C风格输出参数传递String的所有权问题

你的核心问题是需要将函数内创建的String所有权转移给调用者,同时遵循Rust的生命周期规则。直接引用局部变量会导致悬垂指针,正确的做法是通过双重可变引用的解引用操作,把新创建的String所有权转移到调用者持有的实例中。

正确实现代码

pub extern fn get_string(file: &mut &mut String) -> i32 {
    // 创建拥有所有权的新String
    let my_str = "String passed in Rust.\n".to_owned();
    // 将my_str的所有权转移给调用者的String实例
    **file = my_str;
    0 // 返回状态码
}

原理说明

  • **file是对双重可变引用的两次解引用:第一次解引用得到&mut String,第二次解引用直接指向调用者侧的String实例本身。
  • 赋值操作**file = my_str会将局部变量my_str的所有权完全转移给调用者的String,函数结束后my_str的内存不会被销毁,因为所有权已经移交。
  • 这种方式完全符合Rust的所有权规则,既避免了悬垂引用,又满足了你必须通过指针参数传递的要求。

如果调用者侧原本的String有内容,赋值操作会自动drop旧内容并替换为新的String,这是符合预期的行为。

内容的提问来源于stack exchange,提问作者user2506946

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 16:22:08