名稱空間
變體
操作

std::memset

來自 cppreference.com
< cpp‎ | string‎ | byte
在標頭檔案 <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 文件 用於 memset