C语言将字符串转换为数字: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()。

C99
  • 要转换为long long int,请使用strtoll()代替atoll()。