我对如何处理同类的多个命令行参数感到困惑。我在网上看到了一些解决方案,但它们没有显示我正在寻找的内容:
我的命令行参数将是: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;
有没有办法做得更好?我现在真的很困惑。
最佳答案
您有多种选择:
您的示例调用有一个
-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
选项结合使用。或者使用 -f
进行 make
(它指定要扫描的另一个 makefile — 是的,您可以在一次调用中使用多个 -f
选项)。
第三种技术对于文件名以外的东西更有可能有用;文件名包含逗号的风险太大。 sort
实际上不太可能使用 getsubopt()
,但其 -k2n,2
表示法类似。
关于c - 同一类型的多个命令行参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19625659/