std:: memset
|
ヘッダーで定義
<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個の要素にコピー代入する
(関数テンプレート) |
|
|
(C++11)
|
型がトリビアルコピー可能かどうかをチェックする
(クラステンプレート) |
|
Cドキュメント
for
memset
|
|