【发布时间】:2017-08-20 20:12:33
【问题描述】:
我有一个不明白的问题:
fn cipher_with(key: &[u8], data: &[u8]) -> Vec<u8> {
let data_len = 16;
let mut data = data.to_vec();
data.resize(data_len, 2);
let mut output = Vec::<u8>::with_capacity(data_len);
unsafe { output.set_len(data_len) }
output
}
fn main() {
let key = "blabla".as_bytes();
let data = "lorem ipsum.".as_bytes();
println!("{:?}", cipher_with(&key, &data));
}
打印出来:
[108, 111, 114, 101, 109, 32, 105, 112, 115, 117, 109, 46, 0, 0, 0, 0]
但是它是怎么做的呢?我从来没有把这个值给output。
【问题讨论】:
-
"我从来没有把这个值给
output" => 正确。事实上,您从未向output提供任何数据。with_capacity()和set_len()都没有初始化内存,这就是为什么后者甚至被标记为unsafe。为什么您希望output保存任何有用的数据? [顺便说一句:欢迎来到 StackOverflow!如果您对此格式有任何疑问,请在 cmets 中询问] -
@LukasKalbertodt 包含
lorem ipsum.只是巧合吗? -
@zerkms 哇,我没注意到。答案可能就是弗朗西斯在下面所说的。但它让我“wat”了一会儿......°_°
-
@LukasKalbertodt 他们的回答听起来并不令人信服,因为
.resize应该就位。特别是当你缩小它的时候。 -
如果有人提出文档问题 - 请在此处放置链接。