【发布时间】:2018-12-13 05:31:48
【问题描述】:
我有一个函数应该读取一个文件并返回它的内容。
fn read (file_name: &str) -> &str {
let mut f = File::open(file_name)
.expect(&format!("file not found: {}", file_name));
let mut contents = String::new();
f.read_to_string(&mut contents)
.expect(&format!("cannot read file {}", file_name));
return &contents;
}
但我得到这个错误:
--> src\main.rs:20:13
|
20 | return &contents;
| ^^^^^^^^ borrowed value does not live long enough
21 | }
| - borrowed value only lives until here
|
我做错了什么?
我对这里发生的事情的想法是这样的:
let mut f = File::open(file_name).expect(....);- 它获取一个文件句柄并告诉操作系统我们想要对它做些什么。let mut contents = String::new();- 这会在堆上创建一个类似向量的数据结构,以便存储我们即将从文件中读取的数据。f.read_to_string(&mut contents).expect(...);- 这会将文件读入contents空间。return &contents;- 返回指向存储文件数据的向量的指针。
为什么我不能返回我想要的指针?
如何关闭我的文件(f 变量)?我认为 rust 会在变量超出范围后为我关闭它,但如果我需要在此之前关闭它怎么办?
【问题讨论】:
标签: rust