如何使用optarg获取多个值?

时间:2013-03-25 10:38:21

标签: c++ getopt

我希望在争论之后得到更多的optargs,但我不知道该怎么做。我想把我的程序称为

./test -a first second -b third

我现在可以在参数-a之后只得到一个值。当我试图将两个或更多放在那里时,avalue为空。

我的代码:

   char *avalue = NULL;
   char *bvalue = NULL;
   while ((c = getopt (argc, argv, "a:b:")) != -1)
     switch (c)
       {
      case 'a':
         avalue = optarg;
         break;
      case 'b':
         bvalue = 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 ("avalue = %s\nbvalue = %s\n",avalue, bvalue);

1 个答案:

答案 0 :(得分:1)

这种传统格式每个标志最多需要一个参数。你无法改变它。

但是,根据您的shell,您可以使用引号将多个令牌“分组”为一个参数:

./test -a "first second" -b third

此分组将在您的shell中进行,即在将参数发送到您的程序之前。