0

以下のコードを使用して、strtol を使用して文字配列を整数に変換しようとしています。

int foo = strtol(temp, (char **)NULL, 0);

ここで、temp = 4000000010

ただし、strtol はオーバーフローを検出せず、foo を LONG_MAX に設定せず、errno を初期値の 0 から変更しません。

代わりに、bob は -294967286 のオーバーフロー値に変更されます。

だから私はここで何が欠けているのだろうと思っていましたか?

4

3 に答える 3

3

オーバーフローはおそらく、 内ではなく、ステートメント内の暗黙のlongto変換で発生します。intstrtol()

于 2011-10-25T12:54:43.963 に答える
0

大きな数が得られることがわかっている場合は、strtoll代わりに使用してみませんか? もちろん、他の人が指摘したようintに、結果を保存するために an を使用することは絶対にできません。

于 2011-10-25T13:00:23.000 に答える
0
  • 4*10^9 の変数を 32 ビット long に格納することはできません。long はデフォルトで署名されています。
  • long の最大値は (2^32 / 2)-1 = 2147483674 です。システム上で long が 32 ビットであると仮定します。
  • 代わりにstrtoul () を使用してください。
  • foo をunsigned longに変更します。
于 2011-10-25T13:00:25.503 に答える