注册 登录
编程论坛 Linux系统管理

一例说明 optind 到底是多少

madfrogme 发布于 2012-08-25 08:06, 5464 次点击
程序代码:
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
     
int main (int argc, char **argv) {
       int aflag = 0;
       int bflag = 0;
       char *cvalue = NULL;
       int index;
       int c;
     
       opterr = 0;
     
       while ((c = getopt (argc, argv, "abc:")) != -1)
              switch (c) {
                   case 'a':
                        aflag = 1;
                        break;
                   case 'b':
                        bflag = 1;
                        break;
                   case 'c':
                         cvalue = optarg;
                         break;
                   case '?':
                          if (optopt == 'c')
                               fprintf (stderr, "Option -%c requires an argument.\n", optopt);
                         else if (isprint (optopt))
                               fprintf (stderr, "Unknown option `-%c'.\n", optopt);
                         else
                               fprintf (stderr, "Unknown option character `\\x%x'.\n",  optopt);
                         return 1;
                   default:
                         abort ();
           }
     
       printf ("aflag = %d, bflag = %d, cvalue = %s\n", aflag, bflag, cvalue);
     
       for (index = optind; index < argc; index++) {
            printf("%d\t",index);
            printf ("Non-option argument %s\n", argv[index]);
        }
       return 0;
}


$ ./a.out  -a abc -c ddd eee

aflag = 1, bflag = 0, cvalue = (null)

2    Non-option argument abc

3    Non-option argument -c

4    Non-option argument ddd

5    Non-option argument eee

$ ./a.out  -c abc -a ddd eee

aflag = 1, bflag = 0, cvalue = abc

4    Non-option argument ddd

5    Non-option argument eee

前面的数字示明 optind 的变化


[ 本帖最后由 madfrogme 于 2012-8-25 09:10 编辑 ]
0 回复
1