Convert Strings to Number atoi atof dangerous dont use them
suggest changeWarning: The functions atoi
, atol
, atoll
and atof
are inherently unsafe, because: If the value of the result cannot be represented, the behavior is undefined. (7.20.1p1)
#include <stdio.h> #include <stdlib.h> int main(int argc, char** argv) { int val; if (argc < 2) { printf("Usage: %s <integer>\n", argv[0]); return 0; } val = atoi(argv[1]); printf("String value = %s, Int value = %d\n", argv[1], val); return 0; }
When the string to be converted is a valid decimal integer that is in range, the function works:
$ ./atoi 100 String value = 100, Int value = 100 $ ./atoi 200 String value = 200, Int value = 200
For strings that start with a number, followed by something else, only the initial number is parsed:
$ ./atoi 0x200 0 $ ./atoi 0123x300 123
In all other cases, the behavior is undefined:
$ ./atoi hello Formatting the hard disk...
Because of the ambiguities above and this undefined behavior, the atoi
family of functions should never be used.
- To convert to
long int
, usestrtol()
instead ofatol()
. - To convert to
double
, usestrtod()
instead ofatof()
. - To convert to
long long int
, usestrtoll()
instead ofatoll()
.
Found a mistake? Have a question or improvement idea?
Let me know.
Table Of Contents