在平时课本中的atoi();都不能查出OVERFLOW的情况,实际上OVERFLOW是这么产生的:
t = 10 * t + (d - '0');
d是读到的字符(‘0’~‘9’),t是最终的数字,如果t溢出,就是
10 * t + (d - '0') > INT_MAX;
那么就会得到
t > (INT_MAX - (d - '0')) / 10;
所以要想不溢出,就要
t <= (INT_MAX - (d - '0')) / 10;
看程序吧:
#include<limits.h>
#include<ctype.h>
#define OVERFLOW 1
#define UNDERFLOW -1
#define NO_ERROR 0
int x_atoi(char s[],int *result)
{
int digit_value;
int i;
*result = 0;
for(i = 0;isdigit(s[i]);i++)
if(*result <= (INT_MAX - (digit_value = s[i] - '0')) / 10)
*result = 10 * *result + digit_value;
else
return OVERFLOW;
return NO_ERROR;
}