我在通过终端解析我的选项参数时遇到了问题。 执行我的c文件时,我只能有一个选项,即文件名。我可以输入两个选项的文件名(短选项和长选项):
并且他们都需要文件名作为参数。 当我使用" -f"执行程序时和" - 文件名",它工作正常,但是当我测试" -filename"时,它并没有给我错误说"用法是......& #34;并且它将此选项的参数计为main的非选项参数之一(我不知道我是否表达得很好) 任何人都可以帮助我吗?我怎么处理这个?如何告诉用户这不是正确的选择? 到目前为止,这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <getopt.h>
static struct option longopts[] = {
{"filename", required_argument, 0, 'f'},
{0, 0, 0, 0}
};
int main(int argc, char **argv) {
int res;
int indexptr;
char *filename;
while ((res = getopt_long(argc,argv,"f:",longopts,&indexptr)) != -1)
{
switch(res)
{
case 'f':
filename = optarg; // the file is now in optarg
break;
default: /* '?' */
fprintf(stderr, "Usage: %s <[-f/--filename Filename]> <D> <U>\n", argv[0]);
exit(EXIT_FAILURE);
}
}
}
谢谢
答案 0 :(得分:1)
执行-filename
(一个破折号)时,大多数getopt实现会将其视为与-f ilename
相同(这不是错误)。如果你打印出它认为的文件名参数是你会看到&#34; ilename&#34;。