同一种类的多个命令行参数

时间:2013-10-28 00:55:09

标签: c command-line-arguments

我对如何处理同一种类的多个命令行参数感到困惑。我在网上看过几个解决方案,但它们没有显示我想要的内容:

我的命令行参数将是: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;

有没有办法更好地做到这一点?我现在真的陷入困境。

1 个答案:

答案 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符号类似。