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

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

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


strcpy_s関数

概要

文字列をコピーする。

ヘッダ

string.h

形式

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 として定義することが作法となっているが、これを行わずとも関数を使用できる処理系もあり得る。

注意

Visual Studio 2017 に定義されている strcpy_s関数は、Microsoft の独自仕様のものである。特に、実行時制約に関する仕様は実装されておらず、代わりに独自仕様のパラメータ検証が行われる。第1引数か第3引数がヌルポインタの場合や、第2引数がコピーすべき文字数に対して小さすぎる場合にエラーとなる。

使用例

#define __STDC_WANT_LIB_EXT1__ 1
#include <stdio.h>
#include <string.h>

int main(void)
{
    char s[20];

    if( strcpy_s( s, sizeof(s), "abcde" ) == 0 ){
        puts( s );
    }
}

実行結果:

abcde

関連

この関数が定義されていない場合は、strcpy関数strncpy関数を検討する。

ワイド文字列版の wcscpy_s関数がある。

解説章

逆引き「文字列をコピーする」


参考リンク


更新履歴

’2019/2/12 VisualStudio 2015 の対応終了。

’2018/8/23 新規作成。



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

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

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

Programming Place Plus のトップページへ



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