std::memset
來自 cppreference.com
在標頭檔案 <cstring> 中定義 |
||
void* memset( void* dest, int ch, std::size_t count ); |
||
將 static_cast<unsigned char>(ch) 的值複製到 dest 所指向物件的最初 count 個字元。如果該物件是潛在重疊子物件或不是TriviallyCopyable(例如,標量、C 相容結構體,或平凡可複製型別的陣列),則行為未定義。如果 count 大於 dest 所指向物件的大小,則行為未定義。
目錄 |
[編輯] 引數
dest | - | 指向要填充的物件的指標 |
ch | - | 填充位元組 |
count | - | 要填充的位元組數 |
[編輯] 返回值
dest
[編輯] 注意
如果此函式修改的物件在其剩餘生命週期內不再被訪問(例如,gcc 錯誤 8537),則 std::memset
可能會被最佳化掉(根據“如同”規則)。因此,此函式不能用於擦洗記憶體(例如,用零填充儲存密碼的陣列)。
解決此問題的方法包括使用 volatile 指標的std::fill、(C23) memset_explicit()、(C11) memset_s、FreeBSD 的explicit_bzero 或 Microsoft 的SecureZeroMemory
。
[編輯] 示例
執行此程式碼
#include <bitset> #include <climits> #include <cstring> #include <iostream> int main() { int a[4]; using bits = std::bitset<sizeof(int) * CHAR_BIT>; std::memset(a, 0b1111'0000'0011, sizeof a); for (int ai : a) std::cout << bits(ai) << '\n'; }
輸出
00000011000000110000001100000011 00000011000000110000001100000011 00000011000000110000001100000011 00000011000000110000001100000011
[編輯] 參閱
將一個緩衝區複製到另一個緩衝區 (函式) | |
將一個緩衝區移動到另一個緩衝區 (函式) | |
將給定寬字元複製到寬字元陣列中的每個位置 (函式) | |
將給定值複製賦給一個範圍中的每個元素 (函式模板) | |
將給定值複製賦給一個範圍中的 N 個元素 (函式模板) | |
(C++11) |
檢查型別是否為可平凡複製型別 (類模板) |
C 文件 用於 memset
|