• 締切済み

strtod

こんにちは strtodについてです。 double strtod( const char* str, char** str_end ); strtodに途中まで変換できそうで、結局変換できない文字列が渡された場合です。 例えば、 " - " といった文字列です。 この場合、規格としては*str_endになにが入ることになっているのでしょうか? こちらのページでは、 https://ja.cppreference.com/w/cpp/string/byte/strtof 「変換が行えない場合は、 ​0​ が返され、 *str_end が str に設定されます。」 という記述があります。 一方、こちらのページでは https://ja.cppreference.com/w/c/string/byte/strtof この記述はありません。 とりあえず手元にあるgcc4.6.2の場合は *str_end が str に設定されます。 あちこちページを見てみましたが、記述のあるページとないページが混在している状況で、どうにもはっきりわかりません。 昔はこんな記述はなかったと思いますので、規格のどこかの時点で記述が追加されたのではないかと思うのですが、どなたかお判りになる方はいらっしゃいますでしょうか?

みんなの回答

回答No.2

C言語とC++言語の違いでは?

titokani
質問者

お礼

>C言語とC++言語の違いでは? C89に記述があったようですので、そういうわけではなさそうです。 http://port70.net/~nsz/c/c89/c89-draft.html#4.10.1.4 規格からの伝言ゲームのどこかで欠落が発生した結果でしょうかね。

titokani
質問者

補足

ですので、規格としてはクリアになった感じですね。 なので、とりあえず問題は解決しているのですが、謎なのは、なぜこんなに多くのサイトで記述漏れがあるのかというところです。

  • maiko04
  • ベストアンサー率17% (345/1956)
回答No.1

str_endには変換できなかった文字列が返ります。 **ですのでポインターのポインターですね。 hoge なら0が返りhogeがstr_endに返ります。(**ですのでhのアドレスが返ります)

titokani
質問者

お礼

C89のころからあったようですね。 http://port70.net/~nsz/c/c89/c89-draft.html#4.10.1.4 If the subject sequence is empty or does not have the expected form, no conversion is performed; the value of nptr is stored in the object pointed to by endptr , provided that endptr is not a null pointer.

titokani
質問者

補足

それは知っています。 お手持ちの環境で” - "を変換してみてください。

関連するQ&A