gpt4 book ai didi

rust - 线程 'main'对 'Box'感到 panic

转载 作者:行者123 更新时间:2023-12-03 11:33:15 26 4
gpt4 key购买 nike

我正在尝试学习Rust。我正在阅读一本书online,该书实现了unix程序cat。现在,我试图读取作为像cargo run file1.txt file2.txt这样的参数传递的文件的内容,但是程序出现了 panic :

D:\rust\cat> cargo run .\src\test.txt
Compiling cat v0.1.0 (D:\rust\cat)
Finished dev [unoptimized + debuginfo] target(s) in 0.62s
Running `target\debug\cat.exe .\src\test.txt`
thread 'main' panicked at 'Box<Any>', src\main.rs:12:28

这是我的程序:
use std::env;
use std::fs::File;
use std::io;
use std::io::prelude::*;

fn main() {
let args: Vec<String> = env::args().collect();

if args.len() > 1 {
match read_file(&args) {
Ok(content) => println!("{}", content),
Err(reason) => panic!(reason),
}
}
}

fn read_file(filenames: &Vec<String>) -> Result<String, io::Error> {
let mut content = String::new();

for filename in filenames {
let mut file = File::open(filename)?;
file.read_to_string(&mut content)?;
}

Ok(content)
}


谁能解释我在这里想念的东西吗?

最佳答案

Args返回的std::env::args迭代器的第一个元素通常是可执行文件的路径(请参阅docs
更多细节)。

出现错误是因为您没有跳过第一个arg:程序二进制文件不是有效UTF-8字节的序列。

显然是没有意义的错误thread 'main' panicked at 'Box<Any>'是因为panic!没有与的相同参数一起使用format!语法。

use std::env;
use std::fs::File;
use std::io;
use std::io::prelude::*;

fn main() {
for filename in env::args().skip(1) {
match read_file(filename) {
Ok(content) => println!("{}", content),
Err(reason) => panic!("{}", reason),
}
}
}

fn read_file(filename: String) -> Result<String, io::Error> {
let mut content = String::new();

let mut file = File::open(filename)?;
file.read_to_string(&mut content)?;

Ok(content)
}

关于rust - 线程 'main'对 'Box<Any>'感到 panic ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60658126/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com