將字串轉換為數字 atoi() atof() (危險不要使用它們)

警告:函式 atoiatolatollatof 本質上是不安全的,因為: 如果無法表示結果的值,則行為未定義。 (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()