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

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

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


memset関数 🔗

概要 指定のメモリアドレスを対象に、指定の文字を指定文字数だけ書き込む
ヘッダ string.h
形式 void* memset(void* s, int c, size_t n);
引数 s 書き込み先の先頭のメモリアドレス。
c 書き込む文字。
n 書き込む文字数。
戻り値 s が返される。
詳細 引数s で指定したメモリアドレスを起点にして、引数c の値を unsigned char型に変換したものを、引数n で指定した文字数だけ書き込む。
注意 書き込み先の領域が、その後まったくアクセスされないようなプログラムになっている場合に、コンパイラは memset関数自体が不要と考え、最適化によって memset関数の呼び出しごと削除してしまう可能性がある。パスワードなどの重要な情報を書き込んだ領域をクリアする目的で使うと、セキュリティ上の重大な問題につながる恐れがある。この問題を回避するためには、C11 で追加された memset_s関数、C23 で追加された memset_explicit関数を使う方法がある(そのほか、C言語の標準ではない関数を OS などが提供しているかもしれない)。
使用例
#include <stdio.h>
#include <string.h>

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

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

実行結果:

xxxxxfg
関連

ワイド文字とみなして同様の処理を行う wmemset関数がある。

C11 には安全性を高めた memset_s関数がある。

C23 で追加された memset_explicit関数は memset関数と同じ引数・戻り値を持つが、「注意」で説明した問題を回避できる。
解説章 第34章


参考リンク 🔗

本ページはアフィリエイトプログラムによる収益を得ています。
以下のリンクから商品を購入されると、Programming Place 管理者に紹介料が支払われています。


更新履歴 🔗



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

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

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

Programming Place Plus のトップページへ



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