我有一个接受多个命令行参数的程序,所以我使用 getopt。我的一个论点接受一个字符串作为参数。无论如何要通过 getopt 函数获取该字符串,还是我必须通过 argv[] 数组获取它?getopt 也可以读取 args-file
吗?到目前为止,我看到的所有论点都只有一个字符,例如-a
编辑
从下面的答案中,我编写了一个使用 getopt_long() 的程序,但是 switch 语句仅在我使用字符参数而不是长参数时识别参数。我不确定为什么会这样。在传递参数-mf -file sample
时,我看不到打印语句。
编辑
我尝试输入命令参数--file
,然后它起作用了。难道不能用 just 来做到这一点-file
吗?
static struct option long_options[] =
{
{"mf", required_argument, NULL, 'a'},
{"md", required_argument, NULL, 'b'},
{"mn", required_argument, NULL, 'c'},
{"mw", required_argument, NULL, 'd'},
{"lf", required_argument, NULL, 'e'},
{"ld", required_argument, NULL, 'f'},
{"ln", required_argument, NULL, 'g'},
{"lw", required_argument, NULL, 'h'},
{"rf", required_argument, NULL, 'i'},
{"rd", required_argument, NULL, 'j'},
{"rn", required_argument, NULL, 'k'},
{"rw", required_argument, NULL, 'l'},
{"df", required_argument, NULL, 'm'},
{"dd", required_argument, NULL, 'n'},
{"dn", required_argument, NULL, 'o'},
{"dw", required_argument, NULL, 'p'},
{"file", required_argument, NULL, 'q'},
{NULL, 0, NULL, 0}
};
int ch=0;
while ((ch = getopt_long(argc, argv, "abcdefghijklmnopq:", long_options, NULL)) != -1)
{
// check to see if a single character or long option came through
switch (ch){
case 'a':
cout<<"title";
break;
case 'b':
break;
case 'c':
break;
case 'd':
break;
case 'e':
break;
case 'f':
break;
case 'g':
break;
case 'h':
break;
case 'i':
break;
case 'j':
break;
case 'k':
break;
case 'l':
break;
case 'm':
break;
case 'n':
break;
case 'o':
break;
case 'p':
break;
case 'q':
cout<<"file";
break;
case '?':
cout<<"wrong message"
break;
}
}