zan*_*der 7 c string visual-studio-2010
我在这里有一个奇怪的.当我传入以下字符串时,strtol,atol和atoi都返回不正确的值:
long test = strtol("3087663490", &p, 10);
Run Code Online (Sandbox Code Playgroud)
根据我的调试器它返回2147483647.我完全被这个难倒了.有什么建议?
yan*_*yan 12
您的值大于签名long类型可以表示的值.尝试:
unsigned long test = strtoul("3087663490", &p, 10);
Run Code Online (Sandbox Code Playgroud)
(你得到2147483647,因为它是LONG_MAX或0x7FFFFFFF)
正确测试错误strtol()是非常棘手的.您需要类似下面的代码:
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <limits.h>
int main()
{
char *n = "3087663490";
char *p;
long test;
errno = 0;
test = strtol(n, &p, 10);
if (p == n)
printf("No digits found.\n");
else if ((test == LONG_MIN || test == LONG_MAX) && errno == ERANGE)
printf("Value out of range.\n");
else
printf("Value is %ld\n", test);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
运行这个显示你的问题是什么 - Value out of range..使用更宽的类型,如long long(和strtoll()).
| 归档时间: |
|
| 查看次数: |
11549 次 |
| 最近记录: |