gpt4 book ai didi

arrays - 从 rust 中从数组转换的字符串中删除多余的长度

转载 作者:行者123 更新时间:2023-12-03 11:48:50 27 4
gpt4 key购买 nike

我正在尝试用tokio来学习 rust 异步技术。我试图通过使用需要数组作为缓冲区的tokio::io::AsyncReadExt::Read从终端获取输入。但是,当我将该缓冲区转换为字符串时,我无法将其与其他字符串进行比较,因为我认为它具有额外的长度。

这是最少的代码:-

use std::process::Command;
use tokio::prelude::*;
use tokio::time;

async fn get_input(prompt: &str) -> String {
println!("{}", prompt);

let mut f = io::stdin();
let mut buffer = [0; 10];

// read up to 10 bytes
f.read(&mut buffer).await;

String::from_utf8((&buffer).to_vec()).unwrap()
}

async fn lol() {
for i in 1..5 {
let mut input = get_input("lol asks ").await;
input.shrink_to_fit();
print!("lol {} input = '{}' len = {}", i, input, input.len());

if input.eq("sl\n") {
let mut konsole = Command::new("/usr/bin/konsole");
konsole.arg("-e").arg("sl");
konsole.output().expect("some error happend");
}
}
}

#[tokio::main]
async fn main() {
let h = lol();

futures::join!(h);
}

如果我执行这段代码,我会得到:-
lol asks 
sl
lol 1 input = 'sl
' len = 10lol asks

这意味着字符串的长度为10

最佳答案

我在Discord人员的帮助下解决了

我需要使用f.read(...)。await.unwrap()返回的数字,否则,您将在结尾处有一些其他零字节,这些字节不是通过读取返回的

let i = f.read(&mut buffer).await.unwrap() ;

String::from_utf8((&buffer[..i]).to_vec()).unwrap()

关于arrays - 从 rust 中从数组转换的字符串中删除多余的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61931881/

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