トップページ – C言語編 – 標準ライブラリのリファレンス(名前順)
トップページ – C言語編 – 標準ライブラリのリファレンス(ヘッダ別)
概要 | 指定のメモリアドレスを起点にした一定の範囲内へ、指定の文字を指定文字数だけ書き込む | |
ヘッダ | string.h | |
形式 | errno_t memset_s(void* s, rsize_t smax, int c, rsize_t n); | |
引数 | s | 書き込み先の先頭を指すポインタ。ヌルポインタであってはならない。 |
smax | s の領域の要素数。RSIZE_MAX より大きくてはならない。 | |
c | 書き込む文字。 | |
n | 書き込む文字数。RSIZE_MAX および引数s より大きくてはならない。 | |
戻り値 | 成功した場合は 0。何らかのエラーが発生したら 0以外。 | |
詳細 |
引数s で指定したメモリアドレスを起点にして、
memset関数の安全性を高めた関数である。引数smax が加わったことにより、書き込み先の範囲を明確に示し、その範囲を超えて書き込んでしまう事故を防ぐ。もし範囲を超えた書き込みが起こる状況になったときには実行時制約違反となる。実行時制約違反が起きた場合で、引数s がヌルポインタでなく、引数smax が RSIZE_MAX より大きくなければ、
また、memset_s関数で書き込みを行う先の領域が、その後まったくアクセスされないようにプログラムが書かれていたとしても、コンパイラは memset_s関数の呼び出しを最適化によって削除しないことが保証される。memset関数にはこのような保証がないため、たとえばパスワードなどの重要な情報が書き込まれた領域を memset関数でクリアしているつもりでも、コンパイラが memset関数の呼び出しを削除してしまい、クリアできない問題が起こることがある。
|
|
注意 | ||
使用例 |
実行結果:
|
|
関連 |
memset関数はこの関数の元になった古い関数である。 |
|
解説章 |
本ページはアフィリエイトプログラムによる収益を得ています。
以下のリンクから商品を購入されると、Programming Place 管理者に紹介料が支払われています。
Programming Place Plus のトップページへ
はてなブックマーク に保存 | Pocket に保存 | Facebook でシェア |
X で ポスト/フォロー | LINE で送る | noteで書く |
RSS | 管理者情報 | プライバシーポリシー |