我只是想测试一下全局变量optind,做如下测试。如何判断optind的值?
#include <stdio.h>
#include <string.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
char optStr[] = "ab";
int c;
while ((c = getopt(argc, argv, optStr)) != -1) {
printf("optind: %d\n", optind);
switch (c) {
case 'a':
printf("-a\n");
break;
case 'b':
printf("-b\n");
break;
case '?':
printf("error\n");
break;
}
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
./a.out -ab
optind: 1
-a
optind: 2
-b
下一个:
./a.out -a
optind: 2
-a
getopt手册页显示:
变量 optind 是 argv 中要处理的下一个元素的索引。
下面是它如何产生您所看到的输出。
1)./a.out -ab将产生argv如下值:
argv[0]="./a.out"
argv[1]="-ab"
argv[2]=0
Run Code Online (Sandbox Code Playgroud)
optind=1getopt调用:选项a已处理且未optind更改。它保持为 1,因为该a选项已被处理,但仍有一个b选项剩余。getopt调用:选项b已处理,现在optind设置为 2,因为 中没有更多选项了argv[1]。现在来说第二个例子。
2)./a.out -a将产生argv如下值:
argv[0]="./a.out"
argv[1]="-a"
argv[2]=0
Run Code Online (Sandbox Code Playgroud)
optind=1getopt调用:选项a已处理并optind设置为 2,因为 中没有剩余选项argv[1]。