gpt4 book ai didi

C 中的命令行参数整数错误检查

转载 作者:行者123 更新时间:2023-11-30 17:35:12 25 4
gpt4 key购买 nike

我正在尝试从 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com