アレッ*_*ックス 12 rust borrow-checker
我遇到了一个错误:
extern crate rustc_serialize; // 0.3.24
use rustc_serialize::base64::{self, FromBase64, ToBase64};
fn main() {
let a: [u8; 30] = [0; 30];
let b = a.from_base64().unwrap().as_slice();
println!("{:?}", b);
}
Run Code Online (Sandbox Code Playgroud)
错误:
error[E0597]: borrowed value does not live long enough
--> src/main.rs:7:13
|
7 | let b = a.from_base64().unwrap().as_slice();
| ^^^^^^^^^^^^^^^^^^^^^^^^ - temporary value dropped here while still borrowed
| |
| temporary value does not live long enough
8 | println!("{:?}", b);
9 | }
| - temporary value needs to live until here
|
= note: consider using a `let` binding to increase its lifetime
Run Code Online (Sandbox Code Playgroud)
不过,对我来说,代码没有错.为什么我有这个错误?
Arj*_*jan 16
这里的问题是你没有存储from_base64任何地方的结果,然后通过调用来引用它as_slice.链接这样的调用会导致结果from_base64超出行尾,并且所引用的引用不再有效.
extern crate rustc_serialize; // 0.3.24
use rustc_serialize::base64::FromBase64;
fn main() {
let a: [u8; 30] = [0; 30];
let b = a.from_base64().unwrap();
println!("{:?}", b.as_slice());
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7068 次 |
| 最近记录: |