2016-03-29 11 views
0

можно ли сообщить getopt_long Мне нужно два аргумента, если задана опция?C getopt_long два обязательных аргумента для опции

Например, если присутствует -i, для этого потребуются два аргумента, и синтаксический анализ завершится с ошибкой, если они отсутствуют.

+3

короткий ответ нет. – isedev

+0

Спасибо, я найду другой путь! –

+0

Добавлен ответ с каким может быть способ справиться с этим. – sabbahillel

ответ

0

В соответствии с manual и getopt_long() -- proper way to use it? каждый аргумент проходит в одном значении, которое передается через optarg.

Похоже, что вам нужно использовать optarg для первого аргумента и указателя, который используется getopt(), в качестве указателя и strlen (optarg) для указания после аргумента. Затем (когда вы находитесь в --i) проверьте, будет ли следующая строка аргументом или следующей опцией. Если это следующий вариант, выведите ошибку с ошибкой. Если это второй аргумент, поднимите его.

Возможно, вам придется использовать переменную optind и указать на argv [optind], чтобы выполнить обработку.

Однако, это не может работать, потому что

По умолчанию getargs() переставляет содержимое ARGV, как он сканирует, так что в конце концов все не-опции в конце.

get_opt() должен пропустить этот второй аргумент, однако, я не уверен (основано на чтении руководства), если он пропускает его или сохранить его для последующего использования. При написании кода вам нужно будет проверить вывод отладки. У меня нет времени, чтобы написать тест для этого.

+0

Это отличный ответ, спасибо! –