- 締切済み
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 に設定されます。 あちこちページを見てみましたが、記述のあるページとないページが混在している状況で、どうにもはっきりわかりません。 昔はこんな記述はなかったと思いますので、規格のどこかの時点で記述が追加されたのではないかと思うのですが、どなたかお判りになる方はいらっしゃいますでしょうか?
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- m-take0220
- ベストアンサー率60% (477/782)
C言語とC++言語の違いでは?
- maiko04
- ベストアンサー率17% (345/1956)
str_endには変換できなかった文字列が返ります。 **ですのでポインターのポインターですね。 hoge なら0が返りhogeがstr_endに返ります。(**ですのでhのアドレスが返ります)
お礼
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.
補足
それは知っています。 お手持ちの環境で” - "を変換してみてください。
お礼
>C言語とC++言語の違いでは? C89に記述があったようですので、そういうわけではなさそうです。 http://port70.net/~nsz/c/c89/c89-draft.html#4.10.1.4 規格からの伝言ゲームのどこかで欠落が発生した結果でしょうかね。
補足
ですので、規格としてはクリアになった感じですね。 なので、とりあえず問題は解決しているのですが、謎なのは、なぜこんなに多くのサイトで記述漏れがあるのかというところです。