如何保留固定大小的阵列未经注册?

时间:2018-02-17 05:21:12

标签: rust ffi

我正在编写外部C库的绑定,并且有一个函数可以获取指向缓​​冲区的可变char指针,并使用一些以空值终止的日志信息填充它。这个信息总是小于512字节,所以我可以安全地写这样的东西:

let mut log: [c_char; 512];
myfunc(log.as_mut_ptr());

不起作用:

error[E0381]: use of possibly uninitialized variable: `log`
  --> src/a.rs:63:60
   |
63 |             myfunc(log.as_mut_ptr());
   |                               ^^^ use of possibly uninitialized `log`

我可以这样做:

let log: [c_char; 512] = [0; 512];

我不需要填充缓冲区,它将在下一行填充,所以这只是浪费时间(不是很多,将其视为挑战而非真正的性能提升)。

是否可以说“嘿编译器,这次可以使用未初始化的变量!”不知何故?

1 个答案:

答案 0 :(得分:2)

我找到mem::uninitialized

let mut log: [c_char; 512];
log = ::std::mem::uninitialized();

这会阻止编译器抱怨,但你应该仔细考虑是否真的需要它。只有当你确切知道自己在做什么时才使用它(就像我一样)。