我正在尝试从 C 命令行上给出的参数中成功解析一个整数。给定的输入将如下所示:
a.out 2
非常简单。但是我不知道如何对此进行错误检查。例如,以下每个运行都应该抛出错误:
a.out 2hi
a.out 9hello
a.out 4x
当我使用 sscanf 时,我实现的错误处理会捕获整数本身前面的任何非整数字符(例如“> a.out hi4”)。 Atoi() 和 strtol() 不起作用,因为它们只是解析参数前面的整数值。任何帮助将不胜感激!
最佳答案
使用strtol()
并检查它转换的末尾是否是字符串的末尾:
char *end;
errno = 0;
long l = strtol(argv[1], &end, 10); // 0 if you want octal/hex/decimal
if (end == argv[i] || *end != '\0' || ((l == LONG_MIN || l == LONG_MAX) && errno == ERANGE))
…report problems…
…either use l as a long, or check that it is in the range INT_MIN..INT_MAX
这将悄悄地跳过前导空白。如果这是一个问题,您也可以检查它们:
if (!isdigit((unsigned char)argv[i]) && argv[i] != '+' && argv[i] != '-')
…first character isn't part of a decimal number…
另请参阅:
关于C 中的命令行参数整数错误检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23051006/