gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 14:37:57 25 4
gpt4 key购买 nike

我正在尝试为我的包管理器添加选项(例如 -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/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com