日本語 man コマンド類 (ja-man-1.1j_5) と日本語 man ドキュメント (ja-man-doc-5.4 (5.4-RELEASE 用) など) をインストールすると、以下のような man コマンド閲覧、キーワード検索が コンソールからできるようになります。
4.11-RELEASE-K, 5.4-RELEASE-K, 5.5-RELEASE-K, 6.0-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K, 12.1-RELEASE-K は、 プライベート版 (小金丸が編集してまとめたもの) ですが、 より多くの翻訳したファイルが含まれています。 (5.4-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K から 12.4-RELEASE-K, 13.0-RELEASE-K から 13.3-RELEASE-K, 14.0-RELEASE-K から 14.1-RELEASE-K は、全翻訳済み)
13.3-STABLE-K, 15.0-CURRENT-K は現在、作成中で日々更新されています。
Table of Contents
STRCAT(3) FreeBSD ライブラリ関数マニュアル STRCAT(3)
名称
strcat, strncat -- 文字列を連結する
ライブラリ
標準 C ライブラリ (libc, -lc)
書式
#include <string.h>
char *
strcat(char * restrict s, const char * restrict append);
char *
strncat(char * restrict s, const char * restrict append, size_t count);
解説
strcat() と strncat() 関数は、ヌル文字で終了する文字列 s の終りに、ヌル文
字で終了する文字列 append のコピーを追加し、次に終端の `\0' を追加しま
す。文字列 s は、結果を保持するための十分な空間がなければなりません。s と
append がオーバラップするなら、結果は、確定されません。
strncat() 関数は、append から最高で count 文字まで追加し、次に終端の `\0'
を追加します。s と append がオーバラップするなら、結果は、確定されませ
ん。
戻り値
strcat() と strncat() 関数は、ポインタ s を返します。
関連項目
bcopy(3), memccpy(3), memcpy(3), memmove(3), strcpy(3), strlcat(3),
strlcpy(3), wcscat(3)
規格
strcat() と strncat() 関数は、ISO/IEC 9899:1990 (``ISO C90'') に適合して
います。
歴史
strcat() 関数は、Programmer's Workbench (PWB/UNIX) ではじめて登場し、
Version 7 AT&T UNIX に移植されました。strncat() は、Version 7 AT&T UNIX
ではじめて登場しました。
セキュリティの考察
strcat() 関数は、悪意があるユーザがバッファオーバフロー攻撃で実行プログラ
ムの機能を独断的に変更することを可能にするやり方で容易に悪用されます。
strcat() を使用することは避けてください。代わりに、strncat() または
strlcat() を使用して、それが保持することができるより、多くの文字が宛先の
バッファにコピーされないことを確実にします。
strncat() も問題になるかもしれないことに注意してください。まったく切り詰
められない文字列に対してセキュリティ上の問題となるかもしれません。切り詰
められた文字列は、オリジナルである限り長くならないので、それは、完全に異
なるリソースを参照し、切り詰められたリソースの使用法は、極めて不正確な振
る舞いの結果となるかもしれません。例:
void
foo(const char *arbitrary_string)
{
char onstack[8];
#if defined(BAD)
/*
* この最初の strcat は, ひどい振る舞いです. strcat を
* 使用しないでください!
*/
(void)strcat(onstack, arbitrary_string); /* BAD! */
#elif defined(BETTER)
/*
* 次の 2 行は, strncat() の良い使用を示しています.
*/
(void)strncat(onstack, arbitrary_string,
sizeof(onstack) - strlen(onstack) - 1);
#elif defined(BEST)
/*
* これらの行は, 切り詰めのためにテストすることによりさらに着実です.
*/
if (strlen(arbitrary_string) + 1 >
sizeof(onstack) - strlen(onstack))
err(1, "onstack would be truncated");
(void)strncat(onstack, arbitrary_string,
sizeof(onstack) - strlen(onstack) - 1);
#endif
}
FreeBSD 13.2 April 3, 2022 FreeBSD 13.2