名 前
strdup, strndup, strdupa, strndupa − 文 字 列 を 複 製 す る
書 式
#include <string.h>
char *strdup(const char *s);
char
*strndup(const char *s, size_t
n);
char *strdupa(const char *s);
char *strndupa(const char *s, size_t
n);
glibc 向 け の 機 能 検 査 マ ク ロ の 要 件 (feature_test_macros(7) 参 照 ):
strdup():
_SVID_SOURCE || _BSD_SOURCE ||
_XOPEN_SOURCE >= 500 ||
_XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
|| /* Since glibc 2.12: */
_POSIX_C_SOURCE >= 200809L
strndup():
glibc 2.10 以 降 :
_POSIX_C_SOURCE >= 200809L || _XOPEN_SOURCE >= 700
glibc 2.10 よ り 前 :
_GNU_SOURCE
strdupa(), strndupa(): _GNU_SOURCE
説 明
strdup() 関 数 は 、 文 字 列 sの 複 製 で あ る 新 し い 文 字 列 へ の ポ イ ン タ ー を 返 す 。 新 し い 文 字 列 の た め の メ モ リ ー は malloc(3) で 得 て い る 。 そ し て 、 free(3) で 解 放 す る こ と が で き る 。
strndup() 関 数 は 同 様 で あ る が 、 最 大 で n バ イ ト を 複 製 す る 。 s が n よ り も 長 い 場 合 、 n バ イ ト だ け が 複 製 さ れ 、 終 端 の ヌ ル バ イ ト ('\0')) が 追 加 さ れ る 。
strdupa() と strndupa() も 同 様 だ が 、 バ ッ フ ァ ー の 確 保 に alloca(3) を 使 用 す る 点 が 異 な る 。 こ れ ら が 使 用 で き る の は GNU GCC ツ ー ル 群 を 使 う 場 合 だ け で あ り 、 alloca(3) で 説 明 さ れ て い る の と 同 じ 制 限 が あ る 。
返 り 値
成 功 す る と 、 strdup() 関 数 は 複 製 さ れ た 文 字 列 へ の ポ イ ン タ ー を 返 す 。 十 分 な メ モ リ ー が 確 保 で き な か っ た 場 合 に は 、 NULL を 返 し 、 errno に エ ラ ー の 原 因 を 示 す 値 を 設 定 す る 。
エ ラ ー
ENOMEM 複 製 さ れ た 文 字 列 を 割 り 当 て る 十 分 な メ モ リ ー が 確 保 で き な か っ た 。 |
準 拠
strdup() は SVr4, 4.3BSD, POSIX.1−2001 準 拠 で あ る 。 strndup() は POSIX.1−2008 準 拠 で あ る 。 strdupa(), strndupa() は GNU 拡 張 で あ る 。
関 連 項 目
alloca(3), calloc(3), free(3), malloc(3), realloc(3), string(3), wcsdup(3)
こ の 文 書 に つ い て
こ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。