atoiについて教えてください。

[戻る]
まさ 2006/05/18(木) 18:10:50
WindowsXP SP2
VC++ SP6

こんにちは。
当方ダイアログベースの開発を行っております。

現在エディットボックスに値を入力し、OKボタンを押下すると
入力された値が数値に変換されて格納されるという処理をしています。

そこでお尋ねしたいのですが、
「-2147483649」というsigned int型の下限値を超えた値を入力すると
「2147483647」という範囲内の値に変換されてしまいます。

ちなみに「-2147483650」と入力すると「2147483646」に変換されてしまいます。


これはWindowsアプリの仕様なのでしょうか・・。
格納する変数もsigned int型です。

ご存知の方がおられましたら教えて頂けると助かります。

宜しくお願い致します。

Blue 2006/05/18(木) 18:23:47
これはatoiの仕様なのでは?

大きい数を扱いたいならば、__int64の値を返す、_atoi64を使うとか。

REE 2006/05/18(木) 19:08:53
atoiの仕様として、オーバーフローが発生したときの戻り値は未定義です。

それはさておき、格納する変数の下限値を超えているのだから、
その値が入ることはありえませんよね?
どうなって欲しいのですか?

PATIO 2006/05/19(金) 11:26:19
とにもかくにもMSDNやHELP等でatoiをきちんと調べてみましょう。
返却値の説明でREEさんが指摘されている事がきちんと書かれていますよ。

未定義という事はそういう値を渡された時は何を返すかわからないわけで
すから、その状況の時の値を当てにして判断する事は出来ません。
こういう場合は引数を渡す側で配慮して関数を呼び出す必要があります。

まさ 2006/05/23(火) 10:29:11
ご指摘有難うございました。
確かに返却値は未定義ですので引数を渡す側で
判断しなければいけませんね。

結局下限値を超えていた場合はエラーを出すという
ロジックを作成して対処をしました。

Blueさん、REEさん、PATIOさん、
アドバイス有難うございました。

まさ 2006/05/23(火) 10:39:05
[[解決]]
解決とさせていただきます。

古いスレッドには追加発言できません。