c - 同一类型的多个命令行参数

标签 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;

有没有办法做得更好?我现在真的很困惑。

最佳答案

您有多种选择:

  • 您的示例调用有一个 -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/

相关文章:

c - 我在哪里可以找到在我的 C 程序的 .data 部分中创建静态变量的程序集?

c - 在没有尾部或头的列表中插入元素

Cmocka:检查作为参数传递的结构

c - 如何解决这个语义错误?

go - 如何将 exec.Command 的输出通过管道传输到 Golang 中的另一个命令

windows - 为什么 Windows START 命令不能在参数和路径中使用空格?

C 宏 : How to map another macro to variadic arguments?

Python 从命令行参数或标准输入中读取

c# - 在 C# 中将 Guid 传递给命令行解析器库

python - 将命令行参数传递给从 Makefile 调用的 python 脚本