调用 Read::read 时应为 &mut [u8]

Expected &mut [u8] when calling Read::read

use std::io::Read;
use std::net::TcpListener;

struct Server<'a> {
    ip_addr: &'a str,
}

impl<'a> Server<'a> {
    fn receive(&self) {
        let mut received_message_buf: [u8; 100];

        let tcp_listener = TcpListener::bind(self.ip_addr).unwrap();
        tcp_listener.accept().unwrap().0.read(&received_message_buf);
    }
}

fn main() {}

我的类型不匹配:

<anon>:13:47: 13:68 error: mismatched types:
 expected `&mut [u8]`,
    found `&[u8; 100]`
(values differ in mutability) [E0308]
<anon>:13         tcp_listener.accept().unwrap().0.read(&received_message_buf);
                                                        ^~~~~~~~~~~~~~~~~~~~~

您需要使用 &mut received_message_buf 而不是 &

&mut 创建一个可变引用(因此 read() 可以将内容放入您的缓冲区),而 & 创建一个不可变引用。