C - 整数值和负值的 getopt 错误处理



如何验证用户是否仅从命令行将整数值传递给getopt选项?用户应仅传递正整数值。

Isdigit(( 函数在这里无法正常工作。

                case 's' :
                    flags=1;
                    start = atoi(optarg);

如何检查开始是否只包含整数值?

                ./prog -scf

默认情况下,当输入任何字符时,它将s值作为0,因为我使用的是atoi函数,但实际上它应该在传递cf时给出错误。

甚至尝试了 strtol(( ,但没有用

            start = (int) strtol(optarg, &ptr, 10);

即使我使用 strtol(( 函数,它也只有在同时传递数字和字符串时才有效。

            eg ./prog -s5abc        --> this works
            eg  ./prog -sabc         -->does not work

这里再次开始取 0 值,因为只通过宪章! 但是如果用户本身通过 0,那么我如何处理错误?

           eg ./prog -s0        --> s takes 0 value, valid
           eg  ./prog -sabc     --> s takes 0 value , but invalid

当您使用有符号数字时,这应该可以:

if (optarg[0] != '-' && (optarg[0] < '0' || optarg[0] > '9'))
    *error handling*
for (size_t i = 1; optarg[i] != 0; i++)
    if (optarg[i] < '0' || optarg[i] > '9')
        *error handling*

最新更新