3

文字列で atoi を呼び出そうとしていました5099516444099516441. 最初のものは問題なく変換されました。2 つ目は、10 進数値 2,147,483,647 (0x7FFFFFFF) を示しています。なぜこうなった?

4

2 に答える 2

4

2番目の整数はオーバーフローを作成しています。最大32ビットの符号付き整数は2147483647です。

atoiとにかく使用することは一般的に推奨されていません。代わりに使用strtolしてください。これにより、値が範囲外かどうかが実際にわかります。(入力が範囲外の場合のの動作atoi定義されていません。あなたの動作は単に最大値を吐き出しているようintです)

また、コンパイラにatoi64関数のようなものがあるかどうかを確認することもできます。これにより、64ビット値を操作できます。

于 2013-01-14T15:43:42.503 に答える
1

2147483647 は、C (符号付き) の最大整数値です。それができる最大値を与えています...元が大きすぎてsigned intに変換できません。unsigned int に変換する方法を調べることをお勧めします。

于 2013-01-14T15:44:41.167 に答える