Estou tentando depurar um pedaço de código legado. O código funciona bem para valores de até 9 dígitos, mas começa a lançar erros estranhos para valores maiores que 9 dígitos. Sei que tem algo a ver com a conversão de tipo, mas não consigo descobrir o que.
Este é o código:
int a = 0;
char numbuff[15] = "999999999"; //nine digits long works
printf("%s\n",numbuff);
printf("%f\n",atof(numbuff));
a = atof(numbuff) / 1; //I think they are dividing by 1 to cast to int?
printf("%d\n",a);
Quando executo isso usando numbuff
nove dígitos, obtenho o resultado esperado:
999999999
999999999.000000
999999999
Mas quando executo usando numbuff
o conjunto de 10 dígitos, obtenho este resultado:
9999999999
9999999999.000000
2147483647
Então acho que não estou entendendo muito bem por que o código original está dividindo o float por 1. Pensei que era para converter o float em um int, mas não funciona para números com mais de 9 dígitos.
Acredito que o código esteja usando atof() em vez de atoi() para se livrar de espaços em branco na string numbuff, o que faz sentido (já que numbuff é usado para muitos comprimentos numéricos diferentes).
Então, à primeira vista, esse código parece fazer sentido, mas não está funcionando.
O que está acontecendo e como posso consertar esse código para que funcione com números maiores?