atoiについて教えてください。 – プログラミング – Home

atoiについて教えてください。
 
通知
すべてクリア

[解決済] atoiについて教えてください。


まさ
 まさ
(@まさ)
ゲスト
結合: 24年前
投稿: 64
Topic starter  

WindowsXP SP2
VC++ SP6

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

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

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

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

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

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

宜しくお願い致します。


引用未解決
トピックタグ
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

これはatoiの仕様なのでは?

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


返信引用
REE
 REE
(@REE)
ゲスト
結合: 23年前
投稿: 240
 

atoiの仕様として、オーバーフローが発生したときの戻り値は未定義です。

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


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

とにもかくにもMSDNやHELP等でatoiをきちんと調べてみましょう。
返却値の説明でREEさんが指摘されている事がきちんと書かれていますよ。

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


返信引用
まさ
 まさ
(@まさ)
ゲスト
結合: 24年前
投稿: 64
Topic starter  

ご指摘有難うございました。
確かに返却値は未定義ですので引数を渡す側で
判断しなければいけませんね。

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

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


返信引用
まさ
 まさ
(@まさ)
ゲスト
結合: 24年前
投稿: 64
Topic starter  

解決とさせていただきます。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました