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
), затем распечатайте сообщение об ошибке и выйдите.