memset_explicit | Programming Place Plus C言語編 標準ライブラリのリファレンス

トップページC言語編標準ライブラリのリファレンス(名前順)

トップページC言語編標準ライブラリのリファレンス(ヘッダ別)


memset_explicit関数

概要 指定のメモリアドレスを対象に、指定の文字を指定文字数だけ書き込む
ヘッダ string.h
形式 void* memset_explicit(void* s, int c, size_t n);
引数 s 書き込み先の先頭のメモリアドレス。
c 書き込む文字。
n 書き込む文字数。
戻り値 s が返される。
詳細

引数s で指定したメモリアドレスを起点にして、引数c の値を unsigned char型に変換したものを、引数n で指定した文字数だけ書き込む。

memset関数と異なり、memset_explicit関数で書き込みを行う先の領域が、その後まったくアクセスされないようにプログラムが書かれていたとしても、コンパイラは memset_explicit関数の呼び出しを最適化によって削除しないことが保証される。memset関数にはこのような保証がないため、たとえばパスワードなどの重要な情報が書き込まれた領域を memset関数でクリアしているつもりでも、コンパイラが memset関数の呼び出しを削除してしまい、クリアできない問題が起こることがある。
注意
使用例
#include <stdio.h>
#include <string.h>

int main(void)
{
    char s[] = "abcdefg";

    printf("%s\n", memset_explicit(s, 'x', 5));
}

実行結果:

xxxxxfg
関連

memset関数はこの関数の元になった古い関数である。

呼び出しを削除されてしまう可能性がある問題については memset_s関数でも回避できるが、こちらは引数や戻り値などの仕様も異なっており、memset関数を単純に置き換えられない。
解説章


参考リンク 🔗


更新履歴 🔗



標準ライブラリのリファレンス(名前順)のトップページへ

標準ライブラリのリファレンス(ヘッダ別)のトップページへ

C言語編のトップページへ

Programming Place Plus のトップページへ



はてなブックマーク に保存 Pocket に保存 Facebook でシェア
X で ポストフォロー LINE で送る noteで書く
rss1.0 取得ボタン RSS 管理者情報 プライバシーポリシー
先頭へ戻る