getopt错误处理整数值和负值

时间:2017-05-09 06:44:11

标签: c validation command-line getopt

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

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

                case 's' :
                    flags=1;

                    start = atoi(optarg);

如何检查start是否仅包含整数值?

                ./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

1 个答案:

答案 0 :(得分:0)

当您使用已签名的号码时,应该这样做:

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*