Function core::intrinsics::write_bytes
1.0.0 (const: unstable) · source · pub unsafe fn write_bytes<T>(dst: *mut T, val: u8, count: usize)
Expand description
将从 dst
开始的 count * size_of::<T>()
内存字节设置为 val
。
write_bytes
类似于 C 的 memset
,但将 count * size_of::<T>()
字节设置为 val
。
Safety
如果违反以下任一条件,则行为是未定义的:
-
对于
count * size_of::<T>()
字节的写入,dst
必须是 valid。 -
dst
必须正确对齐。
请注意,即使有效复制的大小 (count * size_of::<T>()
) 是 0
,指针也必须非空的并且正确对齐。
此外,请注意,如果写入的字节不是某些 T
的有效表示,那么以这种方式更改 *dst
很容易导致 (UB) 以后出现未定义的行为。
例如,以下是此函数的不正确用法:
unsafe {
let mut value: u8 = 0;
let ptr: *mut bool = &mut value as *mut u8 as *mut bool;
let _bool = ptr.read(); // 这很好,`ptr` 指向一个有效的 `bool`。
ptr.write_bytes(42u8, 1); // 这个函数本身不会导致 UB...
let _bool = ptr.read(); // ...但它使这个操作成为 UB! ⚠️
}
RunExamples
基本用法:
use std::ptr;
let mut vec = vec![0u32; 4];
unsafe {
let vec_ptr = vec.as_mut_ptr();
ptr::write_bytes(vec_ptr, 0xfe, 2);
}
assert_eq!(vec, [0xfefefefe, 0xfefefefe, 0, 0]);
Run