Manpages

名 前

strtoul, strtoull, strtouq − 文 字 列 を unsigned long int に 変 換 す る

書 式

#include <stdlib.h>

unsigned long int strtoul(const char *nptr, char **endptr, int base);

unsigned long long int strtoull(const char *nptr, char **endptr,
int
base);

glibc 向 け の 機 能 検 査 マ ク ロ の 要 件 (feature_test_macros(7) 参 照 ):

strtoull():

XOPEN_SOURCE >= 600 || _BSD_SOURCE || _SVID_SOURCE || _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L; ま た は cc −std=c99

説 明

strtoul() 関 数 は 、 nptr の 文 字 列 の 最 初 の 部 分 を 、 base を 基 数 と し て unsigned long int に 変 換 す る 。 こ の base は 2 か ら 36 ま で の 値 あ る い は 特 別 な 意 味 を 持 つ 値 0 で な け れ ば な ら な い 。 文 字 列 の 先 頭 に は 、 任 意 の 数 の 空 白 が あ っ て も よ く (空 白 は isspace(3) で 判 定 さ れ る )、 ま た 数 字 の 直 前 に は '+' か '−' の 符 号 が あ っ て も よ い 。 base が 0 ま た は 16 の 場 合 に は 、 文 字 列 の 先 頭 に "0x" を 置 く こ と が で き 、 そ の 場 合 に は 文 字 列 は 16進 数 と し て 扱 わ れ る 。 こ れ 以 外 の 文 字 列 で base が 0 の 場 合 は 、 文 字 列 が '0' で 始 ま る と き は 8進 数 と し て 、 そ れ 以 外 の と き は 10進 数 と し て 扱 わ れ る 。 文 字 列 の 残 り の 部 分 は unsigned long int に 変 換 さ れ る が 、 基 数 に 対 し て 有 効 で な い 数 字 が 現 れ た 時 点 で 変 換 は 終 了 す る 。 (11進 数 以 上 で は 'A' は 大 文 字 ・ 小 文 字 に 関 わ ら ず 10 を 表 し 、 'B' は 11 を 表 現 し , 以 下 同 様 に 、 'Z' は 35 を 表 す 。 )

endptr が ヌ ル 値 (NULL) で な い 場 合 、 strtoul() は 最 初 に 不 正 な 文 字 が 現 れ た ア ド レ ス を *endptr に 格 納 し て い る 。 文 字 列 に 有 効 な 数 字 が ひ と つ も な け れ ば 、 strtoul() は nptr の 元 の 値 を *endptr に 代 入 す る (そ し て 0 を 返 す )。 特 に 、 *nptr が '\0' 以 外 で 、 返 さ れ た **endptr が '\0' な ら ば 、 文 字 列 全 体 が 有 効 だ っ た こ と に な る 。

strtoull() 関 数 は strtoul() 関 数 と 同 様 だ が 、 unsigned long long int 型 の 値 を 返 す 。

返 り 値

strtoul() 関 数 は 変 換 結 果 を 返 す 。 文 字 列 が マ イ ナ ス 符 号 か ら 始 ま っ て い た 場 合 は 、 (符 号 反 転 前 の 値 が オ ー バ ー フ ロ ー し て い な け れ ば ) 変 換 結 果 を 符 号 反 転 し た 値 を unsigned 型 で 返 す 。 変 換 で オ ー バ ー フ ロ ー が 発 生 し た 場 合 は ULONG_MAX を 返 し 、 errnoERANGE を 設 定 す る 。 (ULONG_MAXULLONG_MAX と 読 み 替 え れ ば ) strtoull() は strtoul() と 全 く 同 じ で あ る 。

エ ラ ー

EINVAL

(C99 に は な い ) 指 定 さ れ た base が サ ポ ー ト さ れ て い な い 値 で あ る 。

ERANGE

結 果 の 値 が 範 囲 外 で あ る 。 実 装 に よ っ て は 、 変 換 が 行 わ れ な か っ た 場 合 (数 字 が な く 、 0 を 返 し た 場 合 )、 errnoEINVAL が 設 定 さ れ る 場 合 が あ る 。

属 性

マ ル チ ス レ ッ デ ィ ン グ (pthreads(7) 参 照 ) 関 数 strtoul(), strtoull(), strtouq() は 、 例 外 付 き の ス レ ッ ド セ ー フ で あ る 。 実 行 中 に setlocale(3) を 呼 び 出 し て ロ ケ ー ル を 変 更 し な い 限 り 、 マ ル チ ス レ ッ ド ア プ リ ケ ー シ ョ ン で 安 全 に 使 用 す る こ と が で き る 。

準 拠

strtoul() は SVr4, C89, C99 と POSIX−2001 に 準 拠 し て い る 。 strtoull() は C99 と POSIX.1−2001 に 準 拠 し て い る 。

注 意

strtoul () か ら は 成 功 、 失 敗 ど ち ら の 場 合 で も 0 や ULONG_MAX (strtoull() で は ULLONG_MAX) が 返 る 可 能 性 が あ る の で 、 プ ロ グ ラ ム は 関 数 を 呼 び 出 す 前 に errno を 0 に 設 定 し 、 呼 び 出 し 後 に errno が 0 以 外 の 値 か ど う か を 確 認 し エ ラ ー が 発 生 し た か ど う か を 判 断 す る 必 要 が あ る 。

"C" 以 外 の ロ ケ ー ル の 場 合 、 そ の 他 の 文 字 列 も 受 け 付 け ら れ る か も し れ な い 。 (例 え ば 、 現 在 の ロ ケ ー ル の 1000 毎 の 区 切 り 文 字 に 対 応 し て い る か も し れ な い 。 )

BSD に は 、

u_quad_t strtouq(const char *nptr, char **endptr, int base); と い う 完 全 に 同 様 の 定 義 を 持 つ 関 数 が あ る 。 使 用 中 の ア ー キ テ ク チ ャ ー の ワ ー ド 長 次 第 で あ る が 、 こ の 関 数 は strtoull() や stroul() と 等 価 な 場 合 も あ り え る 。 負 の 値 も 正 当 な 入 力 と み な さ れ 、 エ ラ ー も な く 、 対 応 す る unsigned long int 型 の 値 に 変 換 さ れ る 。

strtol(3) の マ ニ ュ ア ル ペ ー ジ の 例 を 参 照 。 こ の ペ ー ジ で 説 明 し た 関 数 の 使 用 方 法 も 同 様 で あ る 。

関 連 項 目

atof(3), atoi(3), atol(3), strtod(3), strtol(3)

こ の 文 書 に つ い て

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