EN JA
STRCPY(3)
STRCPY(3) FreeBSD Library Functions Manual STRCPY(3)

名称

stpcpy, stpncpy, strcpy, strncpy文字列をコピーする

ライブラリ

Standard C Library (libc, -lc)

書式

#include < string.h>

char *
stpcpy( char * restrict dst, const char * restrict src);

char *
stpncpy( char * restrict dst, const char * restrict src, size_t len);

char *
strcpy( char * restrict dst, const char * restrict src);

char *
strncpy( char * restrict dst, const char * restrict src, size_t len);

解説

stpcpy() と strcpy() 関数は、文字列 srcdst に (終端の‘ \0’文字を含めて) コピーします。

stpncpy() と strncpy() 関数は、 src から dst に多くても len 文字をコピーします。 src の長さが len 文字以下の場合には dst の残りは、‘ \0’文字が詰められます。他の場合は、 dst は、終了させられません。

戻り値

strcpy() と strncpy() 関数は、 dst を返します。 stpcpy() と stpncpy() 関数は、 dst の終わりの‘ \0’文字へのポインタを返します。 stpncpy() が ヌル 文字で dst を終了していないなら、代わりに、(必ずしも有効なメモリ位置を参照していない) dst[n] へのポインタを返します

次の行は、 chararray を“ abc\0\0\0”に設定します :

char chararray[6]; 
 
(void)strncpy(chararray, "abc", sizeof(chararray));

次の行は、 chararray を“ abcdef”に設定します:

char chararray[6]; 
 
(void)strncpy(chararray, "abcdefgh", sizeof(chararray));

ソース文字列の長さが長さ引数と同じかそれ以上であるため chararray は、ヌル文字で終了しないことに注意してください。

次の行は、 input から buf へサイズを合わせて多くの文字をコピーし、結果としてヌル文字で終了させます。 strncpy() の文字列自体がヌル文字で終了することを保証しないため、これは、明確に行わなければなりません。

char buf[1024]; 
 
(void)strncpy(buf, input, sizeof(buf) - 1); 
buf[sizeof(buf) - 1] = '\0';

次の例に示すように strlcpy(3) を使用すると、より良く達成できるかもしれません。

(void)strlcpy(buf, input, sizeof(buf));

strlcpy(3) は、どの標準にも定義されていないので、移植に無関係なときだけ利用するべきであることに注意してください。

規格

strcpy() と strncpy() 関数は、 ISO/IEC 9899:1990 (“ISO C90”) に適合しています。 stpcpy() と stpncpy() 関数は、 IEEE Std 1003.1-2008 (“POSIX.1”) に適合しています。

歴史

stpcpy() 関数は、 FreeBSD 4.4 ではじめて登場し、 stpncpy() は、 FreeBSD 8.0 で追加されました。

セキュリティの考察

strcpy() 関数は、悪意があるユーザがバッファオーバフロー攻撃で実行プログラムの機能を独断的に変更することを可能にするやり方で容易に悪用されます。 (FSA と 使用例 を参照。)
February 28, 2009 FreeBSD