文字列で atoi を呼び出そうとしていました509951644
と4099516441
. 最初のものは問題なく変換されました。2 つ目は、10 進数値 2,147,483,647 (0x7FFFFFFF) を示しています。なぜこうなった?
質問する
4708 次
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 に答える