getopt总是返回-1 / getopt没有做任何事情

时间:2017-11-15 19:24:37

标签: c unix getopt

我正在尝试使用getopt()解析命令行参数。以下是我的代码。无论我在运行程序时传递什么参数,getopt()总是返回-1。

例如:

$ gcc -o test test.c
$ ./test f

有人能看出我做错了什么吗?谢谢。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <getopt.h>

void usage (char * progname)
{
    fprintf(stderr, "Usage Instructions Here ...\n");
    exit(-1);
}


int main (int argc, char *argv[]) 
{
    int opt;

    while((opt = getopt(argc, argv, "?hf:")) != -1) {
        switch(opt) {
            case '?':
            case 'h':
                usage(argv[0]);
                break;
            case 'f':
                {
                    FILE *fp;
                    char *filename = strdup(optarg);

                    if((fp = fopen(filename, "r")) == NULL) {
                        usage(argv[0]);
                    } 
                }
                break;
            default:
                fprintf(stderr, "Error - No such opt, '%c'\n", opt);
                usage(argv[0]);
        }
    }

    return(0);
}

1 个答案:

答案 0 :(得分:1)

你实际上并没有在这里传递一个选项:

$ ./test f

预期选项以-字符开头。 f没有,因此不被视为一种选择。如果你这样称呼它:

$ ./test -f

你会得到这个:

./test: option requires an argument -- 'f'
Usage Instructions Here ...

此外,?字符对getopt具有特殊含义。找到未知选项时返回,并在optopt中存储无效选项的副本。所以你可能不想在你的选项字符串中使用?