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切勿使用函数族。
要转换为longint,请使用strtol()代替atol()。
要转换为double,请使用strtod()代替atof()。
要转换为longlongint,请使用strtoll()代替atoll()。