我试图使用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);
}发布于 2017-11-15 19:32:39
您实际上并没有在这里传递一个选项:
$ ./test f选项将以-字符开始。f没有,因此它不被认为是一个选项。如果你这样称呼它:
$ ./test -f你会得到这个:
./test: option requires an argument -- 'f'
Usage Instructions Here ...此外,?字符对getopt也有特殊的意义。当找到未知选项时返回该选项,并将无效选项的副本存储在optopt中。因此,您可能不希望在选项字符串中使用?。
https://stackoverflow.com/questions/47315677
复制相似问题