int my_atoi(const char* str)
{
assert(str != 0);
const unsigned int maxTest = INT_MAX / 10;
const unsigned int maxDigit = INT_MAX % 10;
int sign = 1;
unsigned int value = 0;
while( *str == ' ' || *str == '\t')
str++;
if( *str == '+' || *str == '-')
{
if(*str == '-')
sign = -1;
str++;
}
while( *str >= '0' && *str <= '9' )
{
unsigned int digit = *str - '0';
if( (value > maxTest) ||
(value == maxTest) && (digit > maxDigit ) )
{
return sign > 0 ? INT_MAX : INT_MIN;
}
value = value * 10 + digit;
str++;
}
return value * sign;
}
溢出的判断
返回0