getopt_long_only: как предотвратить использование следующей опции в качестве аргумента для предыдущей опции с флагом "required_argument"

Например,

У меня есть следующие варианты структуры:

struct option options[] = {
    {"input", required_argument, NULL, OPT_INPUT},
    {"flag", no_argument, NULL, OPT_FLAG},

}

Теперь, если пользователь программы по ошибке пропускает имя входного файла после команды -input, передает флаг следующим образом:

./program -input -flag

Getopt_long_only рассматривает "-flag" как аргумент для ввода, таким образом принимая его как входной файл в программе, а не как следующий аргумент (и, следовательно, возвращая ошибку, если аргумент не передан после -input). Как этого можно избежать?

Я использую GUN/LINUX (2.6.34.3) и gcc (GCC) 4.4.2 20091027 (Red Hat 4.4.2-7).

1 ответ

Я думаю, что самым простым способом было бы просто проверить, что аргумент, переданный для -input, не равен -flag после того, как вы все прочитали. Например, если вы должны сохранить требуемый аргумент ввода в char *tempпросто проверьте что strcmp(temp, "-flag") ненулевой Если он равен нулю (т.е. они набрали ./program -input -flag), затем распечатайте сообщение об ошибке и выйдите.

Другие вопросы по тегам