http://www.cplusplus.com/reference/clibrary/cstdlib/atoi/
On success, the function returns the converted integral number as an int
value.
If no valid conversion could be performed, a zero value is returned.
If the correct value is out of the range of representable values, INT_MAX or INT_MIN is returned.
So how I differ between atoi("poop")
and atoi("0")
and atoi("0000000")
Yes I can loop and check for all zeroes in case I get 0 result, but isn't there a better way?
Notice: I use ANSI C89
That's one of the reasons atoi
is sometimes considered unsafe. Use strtol
/ strtoul
instead. And if you have it use strtonum
.
The function atoi
is more dangerous than you might think. The POSIX
standard says:
If the value cannot be represented, the behavior is undefined.
The C99 standard says this also:
7.20.1
The functions atof, atoi, atol, and atoll need not affect the value of the integer expression errno on an error. If the value of the result cannot be represented, the behavior is undefined.