问题描述
我尝试按以下方式将简单的结构映射到基础缓冲区,其中修改结构还会修改缓冲区:
#[repr(C,packed)]
pub struct User {
id: u8,username: [u8; 20],}
fn main() {
let buf = [97u8; 21];
let mut u: User = unsafe { std::ptr::read(buf.as_ptr() as *const _) };
let buf_addr = &buf[0] as *const u8;
let id_addr = &u.id as *const u8;
println!("buf addr: {:p} id addr: {:p} id val: {}",buf_addr,id_addr,u.id);
assert_eq!(buf_addr,id_addr); // TODO addresses not equal
u.id = 10;
println!("id val: {}",u.id);
println!("{:?}",&buf);
assert_eq!(buf[0],u.id); // TODO buffer not updated
}
但是,缓冲区的起始地址与结构中第一个成员的地址不同,并且修改结构不会修改缓冲区。上面的示例有什么问题?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)