有人可以帮我解决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上运行此代码.我不知道哪一个是准确的.
现在问题是getopt不能第二次使用argv2.但是如果我用argv1注释掉第一个getopt调用,它就可以了.
谁能告诉我我在这里做错了什么?
Die*_*lla 12
argv1和2必须以0结尾:
char* argv1[] = {"par1", "par2", 0};
Run Code Online (Sandbox Code Playgroud)
编辑:好的,我读了getopt手册页,我发现了这个:
变量optind是argv中要处理的下一个元素的索引.系统将此值初始化为1.调用者可以将其重置为1以重新开始扫描相同的argv,或者扫描新的参数向量.
因此,在getopt的两次调用之间使optind = 1使其按预期工作.
| 归档时间: |
|
| 查看次数: |
6029 次 |
| 最近记录: |