Provided by: manpages-ja-dev_0.5.0.0.20140515+dfsg-2_all bug

名前

       strcat, strncat - 二つの文字列を連結する

書式

       #include <string.h>

       char *strcat(char *dest, const char *src);

       char *strncat(char *dest, const char *src, size_t n);

説明

       strcat()  関数は、dest 文字列の後に src 文字列を付け加える。 その際に、dest の最後にある終
       端のヌルバイト ('\0')   は上書きされ、新たに生成された文字列の末尾に終端のヌルバイトが付与
       される。  二つの文字列 srcdest は重なってはならない。 また、文字列 dest は、連結後の結
       果を格納するのに 十分な大きさでなければならない。 dest  が十分な大きさでない場合、プログラ
       ムがどのような動作をするか分からない。  バッファオーバーランはセキュアなプログラムを攻撃す
       る際に好んで使われる方法である。

       strncat()  も同様だが、以下の点が異なる。

       *  src のうち最大 n バイトが使用される。

       *  srcn バイト以上の場合、 src はヌル終端されている必要はない。

       strcat()  と同じく、dest に格納される結果の文字列は常にヌル終端される。

       srcn バイト以上の場合、 strncat() は destn+1 バイトを書き込む (src からの n バイト
       と終端のヌルバイトである)。  したがって、dest の大きさは最低でも strlen(dest)+n+1 でなけれ
       ば ならない。

       strncat()  の簡単な実装は以下のような感じであろう:

           char*
           strncat(char *dest, const char *src, size_t n)
           {
               size_t dest_len = strlen(dest);
               size_t i;

               for (i = 0 ; i < n && src[i] != '\0' ; i++)
                   dest[dest_len + i] = src[i];
               dest[dest_len + i] = '\0';

               return dest;
           }

返り値

       strcat()  関数と strncat()  関数は、結果としてできる文字列 dest へのポインタを返す。

属性

   マルチスレッディング (pthreads(7) 参照)
       関数 strcat() と strncat() はスレッドセーフである。

準拠

       SVr4, 4.3BSD, C89, C99.

注意

       いくつかのシステム (BSD、Solaris など) では以下の関数が提供されている。

           size_t strlcat(char *dest, const char *src, size_t size);

       この関数は、ヌル終端された文字列 src  を文字列  dest  に追加する。  具体例には、  sizestrlen(dest) より大きい場合には最大で size-strlen(dest)-1 バイトを src からコピーし、 結果
       の末尾に終端のヌルバイトを追加する。 この関数では strcat()  のバッファオーバーランが発生す
       るという問題が修正されているが、  size が小さすぎた場合にはデータが失われる問題には、 依然
       として呼び出し側で対処する必要がある。 この関数は strlcat() が作成しようとした文字列の長さ
       を返す。  返り値が size 以上の場合、 データロスが発生している。 データロスが問題となる場合
       は、 呼び出し側で、 呼び出し前に引き数をチェックするか、  この関数の返り値を検査するかのい
       ずれかをしなければならない。  strlcat() は glibc には存在せず、 POSIX による標準化もされて
       いないが、 Linux では libbsd ライブラリ経由で利用できる。

関連項目

       bcopy(3), memccpy(3), memcpy(3), strcpy(3), string(3), strncpy(3), wcscat(3), wcsncat(3)

この文書について

       この man ページは Linux man-pages プロジェクトのリリース 3.65 の一部  である。プロジェクト
       の説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。