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

Rust读取文件返回错误值:多余数值来源疑问

问题:读取文件到Vec<u8>后出现额外0-17数值的原因?

尝试将文件读取到Vec<u8>中,编写了如下Rust函数:

fn read_file(file_name: &str) -> Vec<u8> {
    let mut file = File::open(file_name).unwrap();
    let mut contents = Vec::new();
    //read file into the vec
    for i in 0..file.read_to_end(&mut contents).unwrap() {
        contents.push(i as u8);
    }
    contents
}

目标文件内容为:

5
10
15
4
8
2

但读取后输出的向量为:

[53, 13, 10, 49, 48, 13, 10, 49, 53, 13, 10, 52, 13, 10, 56, 13, 10, 50, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17]

想请教这些额外的0到17的数值来自哪里?


分析与解决

问题出在循环逻辑上:

  • file.read_to_end(&mut contents).unwrap()已经完成了文件内容到contents的读取,它的返回值是读取到的字节总数(这里是18,对应目标文件的所有字节)。
  • 你用这个返回值作为循环上限,遍历0..18(Rust范围是左闭右开,实际覆盖0到17),再把每个i转成u8push到contents里,这就额外添加了0到17这18个数值。

正确写法不需要这个循环,直接返回读取后的contents即可:

use std::fs::File;
use std::io::Read;

fn read_file(file_name: &str) -> Vec<u8> {
    let mut file = File::open(file_name).unwrap();
    let mut contents = Vec::new();
    file.read_to_end(&mut contents).unwrap();
    contents
}

这样得到的Vec<u8>就只会包含文件本身的字节数据,不会有额外数值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 07:20:28