在Mac OS X和Ubuntu中使用atoi()获取C时的结果不同

时间:2012-09-05 15:55:04

标签: c glibc atoi

这是我在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

有什么理由说明不同系统的输出会有所不同吗?

1 个答案:

答案 0 :(得分:9)

这并不奇怪,因为标准行为is not specified

  

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

strtol函数会在返回时为您提供更多信息,因为当值不适合errno时,它会将ERANGE设置为long int