首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >getopt总是返回-1 / getopt什么都不做

getopt总是返回-1 / getopt什么都不做
EN

Stack Overflow用户
提问于 2017-11-15 19:24:37
回答 1查看 592关注 0票数 0

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

例如:

代码语言:javascript
复制
$ gcc -o test test.c
$ ./test f

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

代码语言:javascript
复制
#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);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-15 19:32:39

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

代码语言:javascript
复制
$ ./test f

选项将以-字符开始。f没有,因此它不被认为是一个选项。如果你这样称呼它:

代码语言:javascript
复制
$ ./test -f

你会得到这个:

代码语言:javascript
复制
./test: option requires an argument -- 'f'
Usage Instructions Here ...

此外,?字符对getopt也有特殊的意义。当找到未知选项时返回该选项,并将无效选项的副本存储在optopt中。因此,您可能不希望在选项字符串中使用?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47315677

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档