如何使用GETOPT获取每个命令行选项后指向每个参数的指针

时间:2014-06-15 19:10:40

标签: c linux unix pointers getopt

表单的命令行输入:

exeName -a argumentA -b argumentB -c argumentC

需要将每个参数提取到相应的变量中(即int a = argumentA等)。

出现函数getop()用于查找命令行选项。

但是,我没有看到如何在每个选项后获取指针(所以我可以在它之后拉出参数)。

手册页中的这个引用听起来像......但没有太多关于如何使用它的信息:

  

“如果getopt()找到另一个选项字符,则返回该字符   字符,更新外部变量optind和静态变量   nextchar“

如何在每个命令行选项后使用getop()设置指向参数的指针?

2 个答案:

答案 0 :(得分:1)

从联机帮助页继续:

  

[If ...该选项需要参数] getopt()在 optarg中的同一argv元素或以下argv元素的文本中放置指向以下文本的指针

optarg出现在头文件unistd.h中,其中(也根据联机帮助页)包含:

int getopt(int argc, char * const argv[],
              const char *optstring);

extern char *optarg;
extern int optind, opterr, optopt;

换句话说,它是一个全局变量,通过调用getopt来更新,它遇到带参数的选项。

答案 1 :(得分:1)

optarg指向getopt()扫描的当前选项。如果你想要指向命令行上传递的每个参数的指针,那么你可以将它们存储在由optarg给出的指针数组中。

这是一个最小的工作示例:

的#include  #include

int main (int argc, char **argv)
{
  char *p = 0;
  char *arr[5] = {0};
  int i;
  int c;

  while ((c = getopt (argc, argv, "A:B:C:")) != -1)
    switch (c)
    {
    case 'A':
      arr[0] = optarg; 
      break;
    case 'B':
      arr[1] = optarg;
      break;
    case 'C':
      arr[2] = optarg;
      break;
    default:
      printf("Invalid option %c\n", c);
    }

  printf("A:%s B:%s C:%s", arr[0], arr[1], arr[2]);    
  return 0;
}

当然,如果未提供一个或多个选项,则应添加更多错误检查。