我对如何处理同一种类的多个命令行参数感到困惑。我在网上看过几个解决方案,但它们没有显示我想要的内容:
我的命令行参数将是:myar -q test.a 1-s.txt 2-s.txt 3-s.txt 4-s.txt 5-s.txt
所以,所有这些文件名都需要作为q输入处理。但是,当我尝试这样做时,只会采取第一个。我已经尝试了下面的内容,但它只接受了test.a:
opt = getopt(argc, argv, optString);
while (opt != -1) {
switch (opt) {
case 'q':
globalArgs.filename = optarg;
break;
有没有办法更好地做到这一点?我现在真的陷入困境。
答案 0 :(得分:1)
您有多种选择:
您的示例调用有一个-q
选项,后跟一些文件名(非选项)参数。您使用q
,而不是q:
作为getopt()
选项字符串的一部分,并且处理该文件名作为非选项参数。
您需要用户在每个文件名前面重复-q
(所以myar -q test.a -q 1-s.txt -q 2-s.txt -q 3-s.txt -q 4-s.txt -q 5-s.txt
)。内的选项解析环路,则无论处理optarg
如遇到它,或者你以某种处理的列表藏匿的值以后。
您使用getsubopt()
并要求用户使用逗号分隔符(myar -q test.a,1-s.txt,2-s.txt,3-s.txt,4-s.txt,5-s.txt
)列出参数。
最常用的技术,和一个这将可能是适当的一个归档程序(从命令名推理myar
)是第一个:文件名是简单地非选项参数
许多程序使用第二种技术。考虑使用cc
或-l
或-I
选项的-L
。或者make
和-f
(指定要扫描的另一个makefile - 是的,你可以在一次调用中有几个-f
选项。)
第三种技术更有可能对文件名以外的东西有用;文件名包含逗号的风险太大。 sort
实际上不太可能使用getsubopt()
,但其-k2n,2
符号类似。