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