最近在项目从VC6升级到VS2010的过程中,发现了一些问题,大部分网络上都已有介绍,只是在atoi这个函数使用上,发现的问题,在网络上没怎么找到,也许是我没有发现,这里记录一下,供大家参考。
假设有这么一个串: CString str = "3800000000";
我们将它转换为整数: int nVal = atoi(str);
这行代码,在VC6和VS2010下的结果出现了不同。
VC6下的结果是正确的,nVal = -494967296;是个负数,没有错。但VS2010下,只要str中的数值是大于0x7FFFFFFF的,返回的nVal都等于0x7FFFFFFF。
所以,如果大家在VS2010下用atoi,要注意到这个细节。
具同事说,在VS2005后就是这个样子了。
希望了解原因的朋友说说,为什么会这个样子。其他朋友在编码时请注意。