gpt4 book ai didi

rust - 为什么 `name = *name.trim();` 给我 `expected struct ` std::string::String`, found str`?

转载 作者:行者123 更新时间:2023-11-29 07:57:37 24 4
gpt4 key购买 nike

考虑示例(不构建):

use std::io::{self, Write};

fn main() {
io::stdout().write(b"Please enter your name: ");
io::stdout().flush();
let mut name = String::new();
io::stdin().read_line(&mut name);
name = *name.trim();
println!("Hello, {}!", name);
}

为什么会出现以下错误?

error[E0308]: mismatched types
--> src/main.rs:8:12
|
8 | name = *name.trim();
| ^^^^^^^^^^^^ expected struct `std::string::String`, found str
|
= note: expected type `std::string::String`
= note: found type `str`

最佳答案

让我们看看method signature of str::trim() :

fn trim(&self) -> &str

它返回一个 &str 而不是一个 String!为什么?因为不需要!修剪是一种不需要分配新缓冲区的操作,因此不会产生拥有的字符串。 &str 只是一个指针和一个长度...通过增加指针和减少长度,我们可以从另一个角度查看字符串切片。这就是修剪的全部作用。

因此,如果您真的想将修剪后的字符串转换为拥有的字符串,请说 name.trim().to_owned()

关于rust - 为什么 `name = *name.trim();` 给我 `expected struct ` std::string::String`, found str`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41198951/

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