gpt4 book ai didi

c - 解析带有多个参数的命令行选项 [getopt?]

转载 作者:太空狗 更新时间:2023-10-29 16:32:35 27 4
gpt4 key购买 nike

我需要我的程序从命令行获取几个参数,语法如下:

getpwd -l user1 user2 ... -L -X -S...

因此,我需要让用户支持 -l 选项。我尝试使用 getopt,但运气不佳,只有当我将其他选项放在 -l 之前时它才有效:

getpwd -L -X -S ... -l user1 user2 ...

我的代码(-l-S):

    while((c = getopt(argc, argv, "l:S")) != -1){
switch(c){
case 'l':
index = optind-1;
while(index < argc){
next = strdup(argv[index]); /* get login */
index++;
if(next[0] != '-'){ /* check if optarg is next switch */
login[lcount++] = next;
}
else break;
}
break;
case 'S':
sflag++; /* other option */
break;
case ':': /* error - missing operand */
fprintf(stderr, "Option -%c requires an operand\n", optopt);
break;
case '?': /* error - unknown option */
fprintf(stderr,"Unrecognized option: -%c\n", optopt);
break;
}
}

optoptoptindextern int

所以,问题是:我可以使用 getopt() 函数(或 getopt_long())吗?还是我必须编写自己的解析器才能获得我需要的内容?

最佳答案

您的代码实际上非常非常接近工作。您唯一缺少的是 getopt 只希望您在 -l 之后使用一个参数,因此在 -l 的第一个参数之后继续进行命令行解析。由于您在背后进行操作并提出更多参数,因此您必须告诉 getopt 从何处开始再次解析命令行。

getopt 将该信息存储在全局变量 optind 中。当我添加行时:

optind = index - 1;

在您的 l 案例中的 break; 之前,您的代码开始工作。

关于c - 解析带有多个参数的命令行选项 [getopt?],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15466782/

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