您不应该使用功能atoi
。如果事实上,你应该忘记它曾经存在过。它没有实际用途。
虽然杰克的答案是指出该argv
字符串必须先转换成数字,使用atoi
为此目的(特别是当输入来自“外面的世界”的情况),正确的是对C语言编程的罪行。 atoi
几乎没有任何情况下可以在程序中有意义地使用。
,你应该使用在这种情况下,该功能是strtol
char *end;
long long_value = strtol(argv[2], &end, 10);
if (*end != '\0' || errno == ERANGE)
/* Conversion error happened */;
确切的错误检查条件(如是否需要*end == '\0'
)实际上将取决于你的意图。
如果你想获得最终的int
,你也应该检查值int
范围(或您的应用程序特定的范围内)
if (long_value < INT_MIN || long_value > INT_MAX)
/* Out of bounds error */;
int value = long_value;
/* This is your final value */
来源
2010-03-08 23:47:42
AnT
您可能会发现它有助于构建范围检查所有“一条线”,例如'如果(a <= b && b <= c)',表示“a <= b <= c”的含义。 – 2010-03-09 00:04:39