可能重复:
在 C/C++ 中检测整数溢出的最佳方法
我是 C 编程的初学者,我编写了一个程序来long int
一次读取字节并在空格末尾打印出来。我需要将其配置为使用库中的和捕获溢出/下LONG_MAX
溢。我不允许投射任何高于 的东西,而且它也应该检测负数的溢出。这是我的代码:LONG_MIN
limits.h
long int
int main(void)
{
int c;
int state;
long int num = 0;
while((c = getchar()) != EOF)
{
switch(state)
{
case 0:
{
if (isspace(c))
{
//do nothing;
}
else
{
state = 1;
num = 10 * num + (c - '0');
}
break;
}
case 1:
{
if (isspace(c))
{
printf("%ld\n", num);
num = 0;
state = 0;
break;
}
num = 10 * num + (c - '0');
if (num < LONG_MIN || num > LONG_MAX)
{
printf("overflow\n");
break;
}
break;
}
}
}
return 0;
}
if (num < LONG_MIN || num > LONG_MAX)
似乎不起作用的部分,因为例如,如果输入为LONG_MAX
+1,则在下溢LONG_MIN
时它会溢出并变为,反之亦然。