您当前的位置 :首页 > 学习资料 > 如何解决rust 无法返回阴影临时值得错误?
投稿

如何解决rust 无法返回阴影临时值得错误?

2023-02-13 00:30:54 来源: 作者: 责任编辑:cncml

如何解决rust 无法返回阴影临时值得错误?

pub fn u8tostr (t: [u8;1024]) -> &'static str {
    std::str::from_utf8(&t.clone()).unwrap()
}

这里我传入一个u8的数组 然后把数组转为 str最后返回这个值。

error[E0515]: cannot return value referencing temporary value
   --> src\\main.rs:462:5
    |
462 |     std::str::from_utf8(&t.clone()).unwrap()
    |     ^^^^^^^^^^^^^^^^^^^^^---------^^^^^^^^^^
    |     |                    |
    |     |                    temporary value created here
    |     returns a value referencing data owned by the current function

但 一直报错说 t 是临时创建的值 返回的一个值引用了临时的值!

一直搞不懂这是什么问题!

这是一个工具函数用来转换数组内的信息到文本 然后打印并返回值

解决方法:

 

因为你无法通过没有所有权的变量来得到一个全局生命周期的引用呀...

算了,且让我教你一招:


pub fn u8tostr(t: [u8; 1024] ) -> &'static str {
          Box::leak(
                String::from_utf8_lossy(&t).into_owned().into_boxed_str()
          )
}

 

可应急用,风险自负 )
-------------------------------------------------------------------------------

解决方法2:

 

报错信息很直白了... 你在尝试返回一个已释放对象的引用(野指针)

t.clone()产生的临时变量仅在这行语句内生存,from_utf8的返回值引用了它,所以也只在这行语句内生存,自然不能传到函数外面去

直接&t也不行,t是函数参数,只在函数体内生存,对它的引用也不能传出去

你可以传入引用,避免出现临时变量

pub fn u8tostr(t: &[u8; 1024]) -> &str {
    std::str::from_utf8(&t).unwrap()
}

或者返回一个 owned string
 

pub fn u8tostr(t: [u8; 1024]) -> String {
    std::str::from_utf8(&t).unwrap().to_string()
}

 


文章来源: 责任编辑:cncml
版权声明:
1、本主题所有言论和图片纯属会员个人意见,与本网站立场无关
2、本站所有主题由该文章作者发表,该文章作者与享有文章相关版权
3、其他单位或个人使用、转载或引用本文时必须同时征得该文章作者和的同意
4、文章作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
7、管理员和版主有权不事先通知发贴者而删除本文
不良信息举报信箱 新闻热线:18733599993 技术服务:18733599993 网上投稿
关于本站 | 广告服务 | 免责申明 | 招聘信息 | 联系我们
在线网 版权所有 Copyright(C)2005-2025