这是我在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
有什么理由说明不同系统的输出会有所不同吗?
答案 0 :(得分:9)
这并不奇怪,因为标准行为is not specified:
当转换后的值超出int的可表示值范围时,没有标准规范。
strtol
函数会在返回时为您提供更多信息,因为当值不适合errno
时,它会将ERANGE
设置为long int
。