Rustのチュートリアルを終えたばかりです。rustc 1.34.0-nightly
ArrayをスライスしVectorにpushする部分があります。
しかし返り値が保持されない為にエラーが発生します。
rust
1use sha2::{Sha512, Digest}; 2use bigint::U512; 3use byteorder::{LittleEndian, WriteBytesExt}; 4 5const HASH_LENGTH: usize = 64; 6 7fn generator(address: String, nonce: u32) ->Vec<&[u8]> { 8 let vector_length = address.as_bytes().len() + 4 + HASH_LENGTH * 64; 9 let mut seed = Vec::with_capacity(vector_length); 10 // seed [address 40bytes]-[nonce 4bytes] 11 seed.extend_from_slice(address.as_bytes()); 12 seed.write_u32::<LittleEndian>(nonce).unwrap(); 13 println!("vec={} seed={:?}", vector_length, seed.len()); 14 15 // appends [address 40bytes]-[nonce 4bytes]-[hash0]-...-[hash(HASH_LENGTH)] 16 // [hashN] = SHA512([address 40bytes]-[nonce 4bytes]-[hash0]-...-[hash(N-1)]) 17 let mut hasher = Sha512::new(); 18 let mut hash_ints = Vec::with_capacity(HASH_LENGTH); 19 for _ in 0..HASH_LENGTH { 20 hasher.input(&seed); 21 let hash = hasher.result_reset(); 22 let hash = hash.as_slice(); 23 seed.extend_from_slice(hash); 24 hash_ints.push(U512::from(hash)); 25 } 26 let final_int = U512::from(hasher.result().as_slice()); 27 println!("seed={} len={}", seed.len(), hash_ints.len()); 28 29 // all hash_ints XOR with final_int 30 let xor_hash: Vec<U512> = hash_ints.iter().map( |int| *int ^ final_int).collect(); 31 println!("{:?} == {:?} ^ {:?}", xor_hash[4], hash_ints[4], final_int); 32 33 // 動かない場所 34 let mut outputs = Vec::with_capacity(HASH_LENGTH * 2); 35 for int in &xor_hash { 36 let mut bytes = [0u8; 64]; 37 int.to_little_endian(&mut bytes); 38 let low = &bytes[..32]; 39 let high = &bytes[32..]; 40 outputs.push(low); 41 outputs.push(high); 42 //outputs.push(bytes); 43 } 44 return outputs; 45} 46 47fn main() { 48 let outputs = generator("Test string".to_string(), 123456); 49 for i in &outputs { 50 println!("{:x?}", i.to_ascii_lowercase()); 51 } 52}
error
1error[E0106]: missing lifetime specifier 2 --> src\main.rs:7:49 3 | 47 | fn generator(address: String, nonce: u32) ->Vec<&[u8]> { 5 | ^ help: consider giving it an explicit bounded or 'static lifetime: `&'static` 6 | 7 = help: this function's return type contains a borrowed value with an elided lifetime, but the lifetime cannot be derived from the arguments
今度はライフタイム修飾子'static
を使用しました。しかし下記のエラーが目立ちます。
returns a value referencing data owned by the current function
ArrayのSliceの仕方が悪い為だと思いますが具体的な事がわかりませんでした。
どのようにすればよいのか解る方は回答をお願いします。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/02/19 06:14
2019/02/19 12:18