トップページ – C言語編 – 標準ライブラリのリファレンス(名前順)
トップページ – C言語編 – 標準ライブラリのリファレンス(ヘッダ別)
概要 |
文字列をコピーする。 |
|
ヘッダ | ||
形式 |
errno_t strcpy_s(char* restrict dest, rsize_t destmax, const char* restrict src); |
|
引数 |
dest |
コピー先の配列。ヌルポインタは不可。 |
destmax |
dest の要素数。 |
|
src |
コピー元の文字列。ヌルポインタは不可。また、文字列の長さは destmax よりも小さくなければならない。 |
|
戻り値 |
コピーに成功したら 0 が返される。何らかのエラーが発生したら 0以外が返される。 |
|
詳細 |
バッファオーバーフロー📘などの危険を避けつつ、dest へ src の内容を終端文字を含めてコピーする。src の文字列が終端文字も含めて、すべて dest へコピーできた場合に限って成功であり、0 を返す。 dest がヌルポインタである場合や、destmax が 0 であるか RSIZE_MAX より大きい場合には、実行時制約違反となる。 実行時制約違反となった場合、dest がヌルポインタでなければ、dest[0] にはヌル文字が書き込まれる。また、実行時制約ハンドラとして登録されている関数が呼び出される。 実行時制約ハンドラとしてデフォルトで登録されている関数の動作は処理系定義📘である。set_constraint_handler_s関数を使うと、独自で定義した関数を実行時制約ハンドラとして登録でき、動作を置き換えられる。 この関数は、__STDC_LIB_EXT1__ 事前定義マクロが定義されている処理系📘で使用できる。このマクロが定義されていない場合に使用できるかどうかは処理系定義である。また、この関数を使用するのなら、<string.h> をインクルードする前に、__STDC_WANT_LIB_EXT1__ という名前のマクロを、置換結果 1 になるように定義する。このマクロが 0 に置換されると、この関数は宣言・定義されない[1]。 |
|
注意 | Visual Studio 2017 に定義されている strcpy_s関数は、Microsoft の独自仕様のものである。特に、実行時制約に関する仕様は実装されておらず、代わりに独自仕様のパラメータ検証が行われる。第1引数か第3引数がヌルポインタの場合や、第2引数がコピーすべき文字数に対して小さすぎる場合にエラーとなる。 | |
使用例 |
実行結果:
|
|
関連 |
この関数が定義されていない場合は、strcpy関数やstrncpy関数を検討する。 ワイド文字列版の wcscpy_s関数がある。 |
|
解説章 | 逆引き「文字列をコピーする」 |
()
の前後の空白の空け方)(
の直後、)
の直前に空白を入れない)return 0;
を削除(C言語編全体でのコードの統一)
Programming Place Plus のトップページへ
はてなブックマーク に保存 | Pocket に保存 | Facebook でシェア |
X で ポスト/フォロー | LINE で送る | noteで書く |
![]() |
管理者情報 | プライバシーポリシー |