这是我的问题。我希望能够在我的应用程序中支持这一点:
./cipher [-devh] [-p PASSWD] infile outfile
我设法获得了 [-devh]
支持,但我不知道如何获得 [-p PASSWORD]
支持。当然,我可以手动检查 argc
是否为 2
,然后得到一堆标志,但我更喜欢使用 getopts
并且认为它会更容易。这是我的 [-devh]
代码,我如何扩展它以便它可以支持其余的内容?
while ( (c = getopt(argc, argv, "devh")) != -1) {
switch (c) {
case 'd':
printf ("option d\n");
dopt = 1;
break;
case 'e':
printf ("option e\n");
eopt = 1;
break;
case 'v':
printf ("option v\n");
vopt = 1;
break;
case 'h':
printf ("option h\n");
hopt = 1;
break;
default:
printf ("?? getopt returned character code 0%o ??\n", c);
}
}
最佳答案
直接取自GNU C Library Reference getopt
上的页面:
while ((c = getopt (argc, argv, "abc:")) != -1)
switch (c)
{
case 'a':
aflag = 1;
break;
case 'b':
bflag = 1;
break;
case 'c':
cvalue = optarg;
break;
case '?':
if (optopt == 'c')
fprintf (stderr, "Option -%c requires an argument.\n", optopt);
else if (isprint (optopt))
fprintf (stderr, "Unknown option `-%c'.\n", optopt);
else
fprintf (stderr, "Unknown option character `\\x%x'.\n", optopt);
return 1;
default:
abort();
}
c
这里是带有可选参数的参数,所以这可能是您正在寻找的语法。
我理解 getopt
所做的是循环给定的参数,一次解析它们。因此,当它到达需要第二个参数的选项c
(在您的情况下为p
)时,它将存储在optarg
中。它被分配给您选择的变量(此处为cvalue
)以供稍后处理。
关于c - getopt 在 C 中添加额外功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18582902/