std::memset
From cppreference.com
| ヘッダー <cstring> で定義 |
||
| void* memset( void* dest, int ch, std::size_t count ); |
||
指定されたオブジェクトの最初の count バイトに、static_cast<unsigned char>(ch) の値をコピーします。オブジェクトが 潜在的に重複するサブオブジェクト である場合、または TriviallyCopyable (たとえば、スカラー、C互換構造体、またはトリビアルにコピー可能な型の配列) でない場合、動作は未定義です。 count が dest が指すオブジェクトのサイズより大きい場合、動作は未定義です。
目次 |
[編集] パラメータ
| dest | - | 初期化するオブジェクトへのポインタ |
| 文字 | - | 初期化バイト |
| count | - | 初期化するバイト数 |
[編集] 戻り値
dest
[編集] 注記
std::memset は、この関数によって変更されたオブジェクトがそのライフタイムの残りの期間アクセスされない場合 (たとえば、gcc bug 8537) 、as-if ルールに従って最適化され、削除される可能性があります。このため、メモリのクリア (たとえば、パスワードを格納していた配列をゼロで埋めるなど) にこの関数を使用することはできません。
そのための解決策としては、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
| |