c - 如何根据使用的选项更改大小写

标签 c options argv

我正在尝试为我的包管理器添加选项(例如 -a、-d、-i 等),但无法更改案例。如何根据其中一个通过(IE:cree -a firefox)更改大小写?

我一直在编写包管理器,现在正在尝试设置主 c 文件。在这个文件中,我根据你传递的选项运行特定的函数,例如,如果你想安装一个你会运行的包 creep -a <package>这将调用函数 connection.cadd.c .我很难让案子改变。主 c 文件(或 crawl.c)当前包含以下内容:

#include <stdio.h>
#include "connection.c"

#include "add.c"

int main(int argc, char *argv[])
{
        short i;
        char option;

        option = 'a';

        switch(option) {
        case 'a':
        printf("a used\n");
        connection();
        break;

        case 'd':
        printf("d used\n");
        break;

        default:
        printf("usage: creep [-ad]\n");
        }
}

目前我只是使用打印语句来确保一切正常。我查看了这个以调试并看到 option = 'a'总是这样它会一直运行 case 'a' ,但我不知道如何改变它。我试过option = argv[i] ,但这给出了以下错误:
creep.c:11:9: warning: incompatible pointer to integer conversion assigning to 'char' from 'char *'; dereference with * [-Wint-conversion]
        option = argv[i];
               ^ ~~~~~~~
                 *
1 warning generated.

所以我做了一些搜索,发现了一篇关于在海报被告知不要使用大小写,而是使用 if/else 的情况下使用字符的堆栈溢出帖子。所以我确实尝试了这个并得到:
#include <stdio.h>
#include "connection.c"

#include "add.c"

int main(int argc, char *argv[])
{
        short i;

        for (i = 1; i < argc; i++) {
                if (strncmp(argv[i], "-a", 100))
                        printf("using a\n");
        }
}

但是这也不起作用。然后我决定查看一些引用代码并查看 Plan9base ls,他们选择的方式如下

void
main(int argc, char *argv[])
{
  int i;

  Binit(&bin, 1, OWRITE);
  ARGBEGIN{
  case 'F': Fflag++; break;
  case 'd': dflag++; break;
  case 'l': lflag++; break;
  case 'm': mflag++; break;
  case 'n': nflag++; break;
  case 'p': pflag++; break;
  case 'q': qflag++; break;
  case 'Q': Qflag++; break;
  case 'r': rflag++; break;
  case 's': sflag++; break;
  case 't': tflag++; break;
  case 'u': uflag++; break;
  default:  fprint(2, "usage: ls [-dlmnpqrstuFQ] [file ...]\n");
      exits("usage");
  }ARGEND

但是,这似乎不适用于我的代码库。我将如何提供适当的选择?我似乎无法为我的生活弄清楚这一点......

最佳答案

  • 要回答有关使用带有程序参数的 switch 语句的主要问题:
    我建议研究 getopt(3)。手册页有很好的文档和示例,并且该库易于使用并且在 *nix 项目中具有相当广泛的使用。
  • 要了解为什么您的字符串比较不起作用,请检查返回值。
  • 了解为什么不能设置 option 的值至argv[i] , 请记住 char *var[] 的函数参数在功能上等同于 char **var ,因此您实际上是在尝试从 char 指针设置 char 。
  • 关于c - 如何根据使用的选项更改大小写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56926134/

    相关文章:

    c++ - C++程序中的选项

    cmake - 在 CMake 中枚举控制台参数 (argv)

    C 程序段错误 main()

    c - 32 位有符号整数除法在 PowerPC 上给出 0x7fffffff 作为商

    c - Arduino 阵列问题

    c - 我如何将结构传递给函数

    visual-studio-2010 - 如何切换回那些烦人的水平点和箭头? =)

    c - 如何将 Glade 小部件存储在变量中?

    vim - 可以使 vim 仅将选项卡扩展到文本左侧吗?

    C++通过命令行使用*字符传递多个文件