Rust 从变量创建长度为的空数组

Rust 从变量创建长度为的空数组,rust,Rust,我想从TcpStream中读取自定义的字节数,但我无法初始化新的空数组缓冲区,在那里我可以用变量定义长度。无法使用矢量,因为TcpStreamread函数需要数组 let mut buffer = [0; 1024]; // The 1024 should be a variable 当我用变量替换1024时: let length = 2000; let mut buffer = [0; length]; 我得到的信息是: error[E0435]:尝试在常量中使用非常量值 -->src/

我想从
TcpStream
中读取自定义的字节数,但我无法初始化新的空数组缓冲区,在那里我可以用变量定义长度。无法使用矢量,因为
TcpStream
read函数需要数组

let mut buffer = [0; 1024]; // The 1024 should be a variable
当我用变量替换
1024
时:

let length = 2000;
let mut buffer = [0; length];
我得到的信息是:

error[E0435]:尝试在常量中使用非常量值
-->src/network/mod.rs:26:30
|
26 |让mut buffer=[0;字节];
|^^^^^与常量一起使用的非常量
为什么我不能这样做?

将a与:


你混淆了数组和切片。锈有不同之处:片是内存上的一个视图,以前是用数组、Vec或任何东西设置的。

@ljedrz它不一样,因为这个问题的问题可以用向量解决。在我的情况下,这是不可能的,“感谢”TCPLIBARY您可以使用向量。您可以使用任何可以作为切片取消引用的内容。@DanielO:实际上是一样的,因为任何连续分配的数组(无论其大小是静态已知的,它来自
框,还是来自
Vec
或其他什么)都可以被切片
&[T]
&mut[T]
使用。当然,作为一个新手,你不会马上知道这一点(不确定它是否在书中),所以不要担心问题会被关闭,事实上,为这些问题设置多个“入口”点是很有用的,这会使搜索更容易。
use std::net::TcpStream;

fn main() {
    use std::io::Read;

    let mut stream = TcpStream::connect("127.0.0.1:34254").unwrap();
    let mut v = Vec::with_capacity(128);

    let _ = stream.read(&mut v);
}