將字串轉換為數字 atoi() atof() (危險不要使用它們)
警告:函式 atoi
,atol
,atoll
和 atof
本質上是不安全的,因為: 如果無法表示結果的值,則行為未定義。 (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;
}
當要轉換的字串是範圍內的有效十進位制整數時,該函式有效:
$ ./atoi 100
String value = 100, Int value = 100
$ ./atoi 200
String value = 200, Int value = 200
對於以數字開頭的字串,後跟其他內容,只解析初始數字:
$ ./atoi 0x200
0
$ ./atoi 0123x300
123
在所有其他情況下,行為未定義:
$ ./atoi hello
Formatting the hard disk...
由於上面的含糊不清和這種未定義的行為,永遠不應該使用 atoi
系列函式。
- 要轉換為
long int
,請使用strtol()
而不是atol()
。 - 要轉換為
double
,請使用strtod()
而不是atof()
。
Version >= C99
- 要轉換為
long long int
,請使用strtoll()
而不是atoll()
。