名 前
strtod, strtof, strtold − ASCII 文 字 列 を 浮 動 小 数 点 実 数 に 変 換 す る
書 式
#include <stdlib.h>
double
strtod(const char *nptr, char
**endptr);
float strtof(const char *nptr, char
**endptr);
long double strtold(const char *nptr, char
**endptr);
glibc 向 け の 機 能 検 査 マ ク ロ の 要 件 (feature_test_macros(7) 参 照 ):
strtof(), strtold():
_XOPEN_SOURCE >= 600 || _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L; ま た は cc −std=c99
説 明
strtod(), strtof(), strtold() 関 数 は 、 nptr が 指 し 示 す 文 字 列 の は じ め の 部 分 を double, float, long double 型 の 値 に そ れ ぞ れ 変 換 す る 。 入 力 す る 文 字 列 (の 先 頭 部 分 ) は 以 下 の 形 式 が 期 待 さ れ て い る 。 先 頭 に ホ ワ イ ト ス ペ ー ス 、 次 に プ ラ ス ('+') ま た は マ イ ナ ス ('−') の 記 号 、 そ の 後 に (i) 10 進 数 、 (ii) 16 進 数 、 (iii) 無 限 、 (iv) NAN (計 算 で き な い 数 、 not−a−number) の い ず れ か が あ る (ホ ワ イ ト ス ペ ー ス 、 符 号 は 省 略 可 能 。 ホ ワ イ ト ス ペ ー ス は isspace(3) で 識 別 さ れ る )。
10 進 数 は 1 文 字 以 上 の 10 進 の 数 字 の 列 か ら な り 、 基 を 表 す 文 字 (radix charater) (小 数 点 。 ロ ケ ー ル に 依 存 す る が 、 通 常 は '.') が 含 ま れ る こ と も あ る 。 こ の 後 に 10 進 の 指 数 部 が 続 い て も 良 い 。 10 進 の 指 数 部 は 'E' ま た は 'e' と 、 そ の 後 に 置 か れ る 正 負 記 号 (省 略 可 )、 お よ び そ の 後 に 続 く 1 文 字 以 上 の 10 進 の 数 字 の 列 か ら な り 、 10 の 何 乗 で あ る か を 表 す 。
16 進 数 は 、 "0x" ま た は "0X" と そ の 後 に 続 く 1 文 字 以 上 の 16 進 の 数 字 の 列 か ら な り 、 基 を 表 す 文 字 が 含 ま れ る こ と も あ る 。 こ の 後 に 2 進 の 指 数 部 が 続 い て も 良 い 。 2 進 の 指 数 部 は 'P' ま た は 'p' と 、 そ の 後 に 置 か れ る 正 負 記 号 (省 略 可 )、 お よ び そ の 後 に 続 く 1 文 字 以 上 の 10 進 の 数 字 の 列 か ら 構 成 さ れ 、 2 の 何 乗 で あ る か を 表 す 。 基 を 表 す 文 字 と 2 進 の 指 数 部 は 、 ど ち ら か 一 方 し か 存 在 し て は な ら な い 。 無 限 は "INF" ま た は "INFINITY" で 表 さ れ 、 大 文 字 小 文 字 は 区 別 さ れ な い 。
NAN は "NAN" (大 文 字 小 文 字 は 区 別 さ れ な い ) で 表 さ れ 、 そ の 後 に 文 字 列 (n−char−sequence) が 続 く 場 合 も あ る 。 (n−char−sequence) は 実 装 に 依 存 す る NAN の 型 を 指 定 す る 。
返 り 値
こ れ ら の 関 数 は 、 変 換 さ れ た 値 が あ れ ば 、 そ れ を 返 す 。
endptr が NULL で な い と き は 、 変 換 に 使 わ れ た 最 終 文 字 の 次 の 文 字 へ の ポ イ ン タ ー が endptr で 参 照 さ れ る 場 所 へ 保 存 さ れ る 。 変 換 が 行 わ れ な か っ た と き に は 0 が 返 る 。 そ し て endptr が 参 照 し て い る 場 所 に nptr の 値 (変 換 対 象 で あ る 文 字 列 の 開 始 ア ド レ ス ) が 保 存 さ れ る 。 正 し い 形 式 の 数 値 文 字 列 で あ る が 、 変 換 結 果 が オ ー バ ー フ ロ ー を 起 こ し た 場 合 に は 、 プ ラ ス ま た は マ イ ナ ス の HUGE_VAL (HUGE_VALF, HUGE_VALL) が 返 り (値 の 符 号 に よ る )、 ERANGE が errno に 代 入 さ れ る 。 変 換 結 果 が ア ン ダ ー フ ロ ー を 起 こ し た 場 合 に は 0 が 返 り 、 ERANGE が errno に 代 入 さ れ る 。
エ ラ ー
ERANGE オ ー バ ー フ ロ ー ま た は ア ン ダ ー フ ロ ー が 起 こ っ た 。 |
属 性
マ ル チ ス レ ッ デ ィ ン グ (pthreads(7) 参 照 ) 関 数 strtod(), strtof(), strtold() は 、 例 外 付 き の ス レ ッ ド セ ー フ で あ る 。 実 行 中 に setlocale(3) を 呼 び 出 し て ロ ケ ー ル を 変 更 し な い 限 り 、 マ ル チ ス レ ッ ド ア プ リ ケ ー シ ョ ン で 安 全 に 使 用 す る こ と が で き る 。
準 拠
C89 で は strtod() が 、 C99 で は 残 り の 2 つ の 関 数 が 記 述 さ れ て い る 。
注 意
成 功 、 失 敗 ど ち ら の 場 合 で も 0 を 返 す 可 能 性 が あ る の で 、 プ ロ グ ラ ム は 呼 び 出 す 前 に errno を 0 に 設 定 し 、 呼 び 出 し 後 に errno が 0 以 外 の 値 か ど う か を 確 認 し エ ラ ー が 発 生 し た か ど う か を 判 断 す る 必 要 が あ る 。
glibc の 実 装 で は 、 "NAN" の 後 ろ に 置 く こ と が で き る n−char−sequence は 、 整 数 値 と し て 解 釈 さ れ る (基 数 の 8 や 16 を 示 す ’0’ や ’0x’ を 接 頭 辞 と し て 付 け る こ と が で き る )。 こ の 整 数 値 は 返 り 値 の 仮 数 部 と し て 使 わ れ る 。
例
strtol(3) の マ ニ ュ ア ル ペ ー ジ の 例 を 参 照 。 こ の ペ ー ジ で 説 明 し た 関 数 の 使 用 方 法 も 同 様 で あ る 。
関 連 項 目
atof(3), atoi(3), atol(3), nan(3), nanf(3), nanl(3), strtol(3), strtoul(3)
こ の 文 書 に つ い て
こ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。