2015-05-23 59 views
0
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() {} 

我越來越不匹配的類型:預期與MUT [U8]調用時閱讀::閱讀

<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); 
                 ^~~~~~~~~~~~~~~~~~~~~ 

回答

3

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

&mut創建一個可變引用(因此read()可以將東西放入緩衝區),而&創建一個不可變引用。

+0

我不得不初始化received_message_buf,但它的工作。 –

+0

是的。沒有注意到該變量已初始化。初始化變量總是一個好主意,因爲Rust沒有C的「魔術自動歸零」規則。 – krzysz00

+0

@ krzysz00「魔術自動歸零法則」?最後我檢查了一下,本地變量*沒有初始化爲C中的任何內容。這是Rust試圖阻止您使用未初始化的值的示例,否則會導致您在C中佔用您的位置。 – Shepmaster