我正在编写外部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];
我不需要填充缓冲区,它将在下一行填充,所以这只是浪费时间(不是很多,将其视为挑战而非真正的性能提升)。
是否可以说“嘿编译器,这次可以使用未初始化的变量!”不知何故?
答案 0 :(得分:2)
let mut log: [c_char; 512];
log = ::std::mem::uninitialized();
这会阻止编译器抱怨,但你应该仔细考虑是否真的需要它。只有当你确切知道自己在做什么时才使用它(就像我一样)。