C getopt不读取所有参数

时间:2014-02-18 23:01:31

标签: c linux getopt

我在C中有一项任务,需要为不同形式的程序读入选项。不过,在我开始之前,我想确保getopt部分工作正常。但是,程序不断删除最后一个参数,我不知道为什么。每当我输入最后一个字符时,程序将转到杀死程序的默认值。任何帮助表示赞赏!

#include<unistd.h>
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>

int main(int argc, char **argv)
{
    int sFlag = 0;
    int lFlag = 0;
    int dFlag = 0;
    int rFlag = 0;
    int c;
    opterr = 0;

    while ((c = getopt (argc, argv, "slr:")) != -1)
    {
        switch(c)
        {
            case 's':
                sFlag = 1;
                break;
            case 'l':
                lFlag = 1;
                break;
            case 'r':
                rFlag = 1;
                break;
            default:
                printf("unknown parameter introduced");
                exit(-1);
                break;
        }
    }

    printf("s = %i, l = %i, d = %i, r = %i", sFlag, lFlag, dFlag, rFlag);

    return 1;
}

1 个答案:

答案 0 :(得分:1)

r"slr:"后的冒号符号告诉getopt()等待-r后的强制参数。

示例:

  1. getopt(argc, argv, "slr:")可以解析./project -s -l -r r_arg(或./project -r r_arg -s等)
  2. getopt(argc, argv, "s:lr:")可以解析./project -s s_arg -l -r r_arg
  3. getopt(argc, argv, "s:lr:")也可以解析./project -s -l -r r_arg但没有错误,但程序的工作方式与用户的期望不同。这是因为getopt()期望-s后跟其参数,但看起来如此,因此下一个参数-l已被消耗,并且不会命中switch(c)