我正在尝试使用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);
}
答案 0 :(得分:1)
你实际上并没有在这里传递一个选项:
$ ./test f
预期选项以-
字符开头。 f
没有,因此不被视为一种选择。如果你这样称呼它:
$ ./test -f
你会得到这个:
./test: option requires an argument -- 'f'
Usage Instructions Here ...
此外,?
字符对getopt
具有特殊含义。找到未知选项时返回,并在optopt
中存储无效选项的副本。所以你可能不想在你的选项字符串中使用?
。