(Translated by https://www.hiragana.jp/)
strtod - Wikipedia

strtod (string to double) とは、引数ひきすう文字もじれつC言語げんごdoubleかた変換へんかんする標準ひょうじゅんCライブラリ関数かんすうである。ヘッダーファイル<stdlib.h>宣言せんげんされている。

形式けいしき

編集へんしゅう
#include <stdlib.h>
double strtod(const char *nptr, char **endptr);

C99以降いこう以下いかのようなプロトタイプである。

double strtod(const char * restrict nptr, char ** restrict endptr);

引数ひきすう

編集へんしゅう

だい1引数ひきすうnptr文字もじれつでは、+もしくは-のちに、以下いかのものをつづけてくことができる。

符号ふごう省略しょうりゃくすることもできる。

また、INFわりにINFINITYくこともできる。 INFはそのまえ+ならばせい無限むげんだいに、-ならばまけ無限むげんだいになる。

文字もじれつ先頭せんとう空白くうはくがあった場合ばあい無視むしされる。

だい2引数ひきすうendptrNULLでない場合ばあいendptrしているアドレスに変換へんかん終了しゅうりょう位置いちへのポインタが保存ほぞんされる。

もど

編集へんしゅう

変換へんかん成功せいこうした場合ばあい変換へんかんしたかえす。

変換へんかん失敗しっぱいした場合ばあい0かえす。

ただしいオーバーフローこす場合ばあい、その符号ふごうおうじてただしもしくはまけHUGE_VALかえし、errnoERANGE代入だいにゅうされる。

ただしいがアンダーフローをこす場合ばあい絶対ぜったいdoubleかたなかもっとちいさく正規せいきされたせいかずDBL_MIN以下いかであるようなあたい一般いっぱんてき実装じっそうでは0)をかえす。このときerrnoERANGE代入だいにゅうされるかどうかは実装じっそう定義ていぎである[1]

strtod変換へんかん処理しょりは、現在げんざい設定せっていされているロケール (locale) の影響えいきょうける。そのため、小数点しょうすうてんにピリオドを使つか文化ぶんかけんとコンマを使つか文化ぶんかけんとでは変換へんかん結果けっかわることがあるため注意ちゅうい必要ひつようである。たとえばロケールがドイツ-ドイツ (de-DE) やフランス語ふらんすご-フランス (fr-FR) に設定せっていされている場合ばあい"123.456"という文字もじれつstrtod変換へんかんすると123となり、"123,456"という文字もじれつstrtod変換へんかんすると123.456となる。

一部いちぶ処理しょりけいでは、引数ひきすう追加ついかのロケールオブジェクトをstrtod_l関数かんすうまたは_strtod_l関数かんすう実装じっそうされており、現在げんざいのプロセスやスレッドに設定せっていされているロケールに依存いぞんせず、引数ひきすう指定していしたロケールをもとに変換へんかん処理しょり実行じっこうすることができる[2][3]

C99以降いこうは、もどfloatかたで、オーバーフローにはただしまたはまけHUGE_VALFかえstrtof規定きていされている。

#include <stdlib.h>
float strtof(const char * restrict nptr, char ** restrict endptr);

C99以降いこうは、もどlong doubleかたで、オーバーフローにはただしまたはまけHUGE_VALLかえstrtold規定きていされている。

#include <stdlib.h>
long double strtold(const char * restrict nptr, char ** restrict endptr);

同様どうよう機能きのう標準ひょうじゅん関数かんすうatofがあるが、こちらはエラーが発生はっせいした場合ばあい動作どうさ規定きていされておらず、strtodくらべて堅牢けんろうせいけるため、atof推奨すいしょうとしているガイドラインもある[4][5]

脚注きゃくちゅう

編集へんしゅう

出典しゅってん

編集へんしゅう

関連かんれん項目こうもく

編集へんしゅう

外部がいぶリンク

編集へんしゅう