Everything

strtodf


文字列を浮動小数点数(float型)への変換(最終文字列へのポインタ格納)を行います。

[所属]

標準ライブラリ

[指定形式]

#include <stdlib.h>

float strtodf(const char *str, char **ptr);

[戻り値]

部分文字列が変換できた場合,その値を返します。変換できなかった場合,0を返します。

オーバーフローが生じる(値が表現可能な値の範囲にない)場合,HUGE_VAL,または-HUGE_VALを返し,ERANGEをグローバル変数errnoにセットします。アンダフローが生じる場合,0を返し,マクロERANGEをグローバル変数errnoにセットします。

[詳細説明]

strの指す文字列の最初の部分をfloat型の表現に変換します。変換される部分文字列は,次の形式の,空白でない通常の文字から始まる,strの最長先頭部分文字列です。

 

[ + | - ] digits [ . ] [ digits ] [ (e | E) [ + | - ] digits ]

 

strが空か,または空白文字だけから成り立っている場合,および最初の通常文字が“+,“-”,“.”,または数字以外の場合,部分文字列には文字が含まれていません。部分文字列が空の場合,変換は行われず,strの値がptrの指す領域に格納されます。空でない場合,部分文字列は変換され,最終文字列(少なくともstrの終端を示すnull文字(\0)を含む)へのポインタがptrの指す領域に格納されます。

備考

本関数は,リエントラントではありません。

[使用例]

#include    <stdlib.h>
#include    <stdio.h>
void func(float ret) {
    char    *p, *str, s[30];
    str = "+5.32a4e";
    ret = strtodf(str, &p);         /*retには5.320000を返し,pの領域には‘a’へのポインタを*/
                                    /*格納*/
    sprintf(s, "%lf\t%c", ret, *p); /*sの指す配列に“5.320000 a”を格納*/
}