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