4

这是我在 Mac OS X(10.8.1、64 位和 10.6.8、32 位)和 Ubuntu(10.04、32 位)上运行的代码:

printf("%d\n", atoi("2147483648"));
// returns -2147483648 in Mac OS X 10.8.1 and 10.6.8
// returns 2147483647 in Ubuntu

这是我在谷歌搜索后发现的:http://gynvael.coldwind.pl/?id= 365

输出在不同系统上有所不同有什么原因吗?

4

1 回答 1

9

这并不奇怪,因为标准没有指定行为:

当转换后的值超出 int 的可表示值范围时会发生什么,没有标准规范。

strtol函数在返回中为您提供更多信息,因为它设置errnoERANGE当值不适合 a 时long int

于 2012-09-05T15:57:19.267 回答