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
相关产品推荐
相关产品推荐

