Manpages

名 前

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 バ イ ト を 複 製 す る 。 sn よ り も 長 い 場 合 、 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/ に 書 か れ て い る 。