有人可以帮我解决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调用,它就可以了.
谁能告诉我我在这里做错了什么?
argv1和2必须以0结尾:
char* argv1[] = {"par1", "par2", 0};
编辑:好的,我读了getopt手册页,我发现了这个:
变量optind是argv中要处理的下一个元素的索引.系统将此值初始化为1.调用者可以将其重置为1以重新开始扫描相同的argv,或者扫描新的参数向量.
因此,在getopt的两次调用之间使optind = 1使其按预期工作.