如何判断getopt中optind的值

hel*_*hel 2 c linux

我只是想测试一下全局变量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

kay*_*lum 5

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=1
  • 第一次getopt调用:选项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=1
  • 第一次getopt调用:选项a已处理并optind设置为 2,因为 中没有剩余选项argv[1]