нужна помощь getopt Переполнение стека

У меня есть следующий код, и я не уверен, как добавить необязательные аргументы для расположения файлов после -arguments при запуске из командной строки. Я много читал, но меня это просто смущает. Вот код, как он есть в настоящее время.

int c;
while ((c = getopt(argc, argv, "vdras")) != EOF) {
switch (c) {
case 'v': v = true;
break;
case 'd': d = true;
break;
case 'r' : r = true;
break;
case 'a' : a = true;
break;
case 's' : s = true;
break;
}
}
argc -= optind;
argv += optind;

Теперь мне нужно иметь возможность добавить файл в конце всех этих команд (или подмножество этих команд).

Таким образом, я мог бы ввести -rda file здесь или -a filehere или просто filehere в качестве допустимых аргументов для программы.

Я читаю ЭТОТ ссылка, которая заставляет меня поверить, что нужно ставить двойные точки с запятой между всеми параметрами командной строки, поэтому это будет выглядеть так:

while ((c = getopt(argc, argv, "::v::d::r::a::s::")) != EOF) {

позволил бы мне указать необязательные аргументы после условий, однако я не знаю, как их захватить. Например, я пытался привести случаи, когда я вводил случайное имя файла и распечатывал какой-то тестовый код, просто чтобы я знал, что он работает, но я не могу понять, как это правильно. Мне интересно, нужно ли мне каким-то образом включать * optarg в мой переключатель, который позволит мне получить любые аргументы после опций, но я не совсем уверен, как это сделать. Любое объяснение было бы здорово.

0

Решение

Вы читали справочная страница? Аргумент option, если он есть, будет в глобальной переменной optarg,

Даже ссылка у вас там говорит то же самое. Ваша строка параметров не нуждается в ведущей :: либо — только те, что после букв, что-то значат.

Изменить: Вот полный рабочий пример того, что, похоже, вы пытаетесь сделать:

#include <unistd.h>
#include <iostream>

int main(int argc, char **argv)
{
int ch;

while ((ch = getopt(argc, argv, "v:")) != -1)
{
switch (ch)
{
case 'v':
std::cout << optarg << std::endl;
break;
}
}
return 0;
}

И вывод:

$ ./example -v abcde
abcde
0

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

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

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