const char *s : | 変換対象文字列。 書式は[空白類文字][符号+-][数値列][.][数値列][eまたはE[符号]数値列]。このとき、[]内は省略可能。 また、接尾語(F/f)は含まない。 (例)x = strtod(" -1.23e-3", NULL); printf("x=%g\n", x); (結果)x=-0.00123 |
char **endptr : | 変換不可能な文字列へのポインタの格納先。 (例)x = strtod("-1.23ABC", &e); printf("x=%g e=%s\n", x, e); (結果)x=-1.23 e=ABC … "-1.23"を変換。"ABC"は変換不可能。 NULLの場合には、変換不可能な文字列への処理は行わない。 (例)x = strtod("-1.23ABC", NULL); printf("x=%g\n", x); (結果)x=-1.23 … "-1.23"を変換。"ABC"は捨てる。 |
成功時 : | s の値をdoubleで返却。 |
失敗時 : | 0 (例)x = strtod("ABC.EFG", &e); printf("x=%g e=%s\n", x, e); (結果)x=0 e=ABC.EFG … "ABC.EFG"は変換できない。 ※正しい値が表現可能な値の範囲外であるとき、値の符号に従って、正または負のHUGE_VALを返し、 errnoにはマクロERANGEの値を格納する。正しい値がアンダーフローを起こすときには0を返し、 errnoにはマクロERANGEの値を格納する。 |
#include <stdlib.h> #include <stdio.h> #include <errno.h> /* ERANGEを使用するために必要 */ #include <math.h> /* HUGE_VALを使用するために必要 */ int main(void) { char s[256], *e; double x; printf("変換する数値を入力してください。"); scanf("%s", s); x = strtod(s, &e); if (errno != ERANGE) { printf("変換数値=%f\n", x); if (*e != '\0') printf("変換不可能部分=%s\n", e); } else if (x == HUGE_VAL) printf("double値で表現できる値を超えました。\n"); return 0; }【実行結果例1】
変換する数値を入力してください。123.456789abcde 変換数値=123.456789 変換不可能部分=abcde ※緑字はキーボードからの入力
▼戻る▼
「初心者のためのポイント学習C言語」 Copyright(c) 2000-2004 TOMOJI All Rights Reserved