gpt4 book ai didi

命令行处理库 - getopt

转载 作者:太空狗 更新时间:2023-10-29 14:50:13 30 4
gpt4 key购买 nike

有人可以帮助我使用 getopt 函数吗?

当我在 main 中执行以下操作时:

char *argv1[] = {"testexec","-?"};
char *argv2[] = {"testexec","-m","arg1"};
int cOption;
/* test for -? */

setvbuf(stdout,(char*)NULL,_IONBF,0);
printf("\n argv1 ");
while (( cOption = getopt (2, argv1, "m:t:n:fs?")) != -1) {
switch(cOption){
case 'm':
printf("\n -m Arg : %s \n",optarg);
break;
case '?':
printf("\n -? Arg ");
break;
case 'n':
printf("\n -n Arg : %s \n",optarg);
break;
}
}

printf("\n argv2 ");

while (( cOption = getopt (3, argv2, "m:t:n:fs?")) != -1) {
switch(cOption){
case 'm':
printf("\n -m Arg : %s \n",optarg);
break;
case '?':
printf("\n -? Arg : %s \n",optarg);
break;
case 'n':
printf("\n -n Arg : %s \n",optarg);
break;
}
}

我在使用旧 libc 版本的 rhel3 上运行这段代码。我不知 Prop 体是哪一个。

现在的问题是 getopt 对 argv2 第二次不起作用。但是,如果我用 argv1 注释掉第一个 getopt 调用,它就会起作用。

谁能告诉我我做错了什么?

最佳答案

argv1 和 2 必须以 0 结尾:

char* argv1[] = {"par1", "par2", 0};

编辑:好的,我阅读了 getopt 手册页并找到了这个:

The variable optind is the index of the next element to be processed in argv. The system initializes this value to 1. The caller can reset it to 1 to restart scanning of the same argv, or when scanning a new argument vector.

因此,在 getopt 的两个调用之间设置 optind=1 使其按预期工作。

关于命令行处理库 - getopt,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/535792/

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