< 返回版块

sankred9527 发表于 2024-02-25 06:38

Tags:array

譬如C里面可以这样初始化一个数组: char buf[32] = "hello";

但是 rust 就必须这样写: let buf: [u8; 8] = *b"hello\0\0\0";

必须手工在后面补上 \0\0\0 ,有啥简洁的办法吗?

评论区

写评论
asuper 2024-02-26 11:03
let mut buf : Vec<u8> = Vec::with_capacity(32);
buf.extend(b"hello");
buf.push(0);
unsafe { buf.set_len(6); }

这个set_len,只要使用正确,是不会有问题的

Bai-Jinlin 2024-02-25 08:58

没什么简单的方法,只能自己包一个函数,不过你要用ffi的话建议用CString

fn c_array<const N:usize>(s:&[u8])->[u8;N]{
    assert!(s.len()<=N);
    let mut t=[0;N];
    t[0..s.len()].copy_from_slice(s);
    t
}
fn main(){
    let t=c_array::<5>(b"asd");
    assert_eq!(&t,&[97,115,100,0,0]);
}
1 共 2 条评论, 1 页