Как получить несколько значений с помощью optarg?

Я хотел бы получить больше optargs после аргументов, но я не уверен, как это сделать. Я хочу назвать свою программу как

./test -a first second -b third

и теперь я могу получить только одно значение после аргумента -a. Когда я пытаюсь поместить туда два или более, значение равно нулю.

Мой код:

   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);

0

Решение

Этот обычный формат требует не более одного аргумента для каждого флага. Вы не можете изменить это.

Однако, в зависимости от вашей оболочки, вы можете использовать кавычки для «группировки» нескольких жетоны в один аргумент:

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

Эта группировка будет происходить внутри вашей оболочки, то есть до того, как аргументы будут отправлены в вашу программу.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]