| 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