Namespaces
Variants

std:: memset

From cppreference.net
ヘッダーで定義 <cstring>
void * memset ( void * dest, int ch, std:: size_t count ) ;

static_cast < unsigned char > ( ch ) count 個の先頭文字それぞれに dest が指すオブジェクトへコピーします。オブジェクトが 潜在的にオーバーラップする部分オブジェクト である場合、または TriviallyCopyable (例えば、スカラ型、C互換構造体、またはトリビアルコピー可能な型の配列)でない場合、動作は未定義です。 count dest が指すオブジェクトのサイズを超える場合、動作は未定義です。

目次

パラメータ

dest - 埋め込み先オブジェクトへのポインタ
ch - 埋め込みバイト
count - 埋め込むバイト数

戻り値

dest

注記

std::memset は、この関数によって変更されたオブジェクトがその生存期間中に再度アクセスされない場合(例: as-if ルール)、最適化によって除去される可能性があります(例: gcc bug 8537 )。このため、この関数はメモリの消去(例:パスワードを格納していた配列をゼロで埋めること)には使用できません。

そのための解決策には、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個の要素にコピー代入する
(関数テンプレート)
型がトリビアルコピー可能かどうかをチェックする
(クラステンプレート)