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

Rust中如何将String转为Vec并修改其元素值?

解决Rust中String转可变字节向量并修改的问题

错误原因

你遇到的问题根源在于:s.as_bytes()返回的是不可变的字节切片&[u8],调用clone()仅复制了这个引用,而非创建独立的可变向量。此时vec本质是指向原字符串字节的不可变引用,即便声明mut vec,也只是允许引用本身指向其他切片,无法修改切片内的元素,这就是编译器抛出E0594错误的原因。

正确实现方式

方式一:转换为可变Vec后循环修改

将切片转为真正的Vec<u8>(拥有所有权的可变容器),再遍历修改元素:

fn main() {
    let s: String = "abcdefg".to_string();
    let mut vec = s.as_bytes().to_vec(); // 转换为可变Vec<u8>
    println!("{:?}", vec);
    // 遍历可变引用修改每个字节
    for byte in &mut vec {
        *byte -= 97;
    }
    println!("{:?}", vec);
}

方式二:用迭代器直接生成目标向量(更符合Rust风格)

通过iter().map()直接转换每个字节,再收集为向量,无需后续修改:

fn main() {
    let s: String = "abcdefg".to_string();
    let vec: Vec<u8> = s.as_bytes().iter().map(|&b| b - 97).collect();
    println!("{:?}", vec);
}

两种方式都能得到预期输出:[0, 1, 2, 3, 4, 5, 6]。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 14:48:16