On the one hand: atof() even returns a double, you could simply use atoi() instead if that was the case. On the other hand: it will always end the string after 2 characters behind the '.' and therefore you won't get integers only.
However, the loop condition is still wrong: the length safety check i < 64-3 will stop the loop when i == 64-3, which means it would try to set input[64] afterwards - that's an OOB error.
Ah yeah, that tricksy +3. I kind of assumed on reading that code was to pull the int off the front so you could test it wasn't 9 or lower. Replace the dot with a \0 to grab the int via atoi then back to a dot to run atof on it to get the value as a double, having already tested the int.
Something like (shamelessly cribbed from rohzeal and hacked):
Code:
char input[64];
gets_s(input, 64);
int i = 0;
while(input[i] != '.' && i < 64-1) {
i++;
}
input[i] = 0; //binary 0, Ends the string
int chk=atoi(input);
if chk<10 {
/* TODO: Error */
}
else {
input[i]='.'
double f = atof(input);
}
This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
By continuing to use this site, you are consenting to our use of cookies.