一、问题
在一个while循环中使用getopt解析命令,发现第一次可以正常解析,第二次就不解析了。
#include <stdio.h>
#include <unistd.h>
int main()
{
int argc = 2;
char *argv[10];
int oc;
argv[0] = "help";
argv[1] = "-l";
while((oc = getopt(argc,argv,"l")) != -1)
{
switch(oc)
{
case 'l':
printf("help long option\n");
break;
default:
printf("error option\n");
break;
}
}
printf("%d\n",optind);
argc = 2;
argv[0] = "help";
argv[1] = "-s";
optind = 0; //不加的话无法重复调用
while((oc = getopt(argc,argv,"l")) != -1)
{
switch(oc)
{
case 'l':
printf("help long option\n");
break;
case '?':
printf("help error option\n");
break;
default:
printf("error option\n");
break;
}
}
return 0;
}
二、
加一句即可正常。不知道为什么getopt要这么设置。
optind = 0; //不加的话无法重复调用
文章讨论了一个C程序示例,该程序在while循环中使用getopt函数解析命令行选项。首次调用getopt能正常工作,但在第二次调用时出现问题。问题在于getopt的状态由全局变量optind维护,不手动重置optind到0,则无法再次进行解析。解决方案是将optind设置为0,允许getopt重新开始处理命令行参数。
1537

被折叠的 条评论
为什么被折叠?



