Я не понимаю, почему результат конвертируется в INT_MIN вместо целочисленного переполнения? Любые идеи?
#include <stdio.h>
int ft_atoi(const char *str)
{
int sign;
int result;
sign = 1;
result = 0;
while (*str == 32 || (*str >= 9 && *str <= 13))
str++;
if (*str == '+')
str++;
else if (*str == '-')
{
sign = -1;
str++;
}
while (*str >= '0' && *str <= '9')
{
printf("before: %d\n", result);
result = (result * 10) + *str - '0';
printf("after: %d\n", result);
str++;
}
return (sign * result);
}
int main(void)
{
printf("%d\n", ft_atoi("-2147483648"));
return (0);
}
Результат:
e1z2r7p5% ./a.out
до: 0
после: 2
до: 2
после: 21
до: 21
после: 214
до: 214
после: 2147
до: 2147
после: 21474
до: 21474
после: 214748
до: 214748
после: 2147483
до : 2147483
после: 21474836
до: 21474836
после: 214748364
до: 214748364
после: -2147483648
-2147483648