Создание программы на C ++, которая принимает аргументы из командной строки - PullRequest
0 голосов
/ 06 мая 2011

Я пытаюсь узнать, как создать программу на C ++, чтобы при ее запуске можно было указать, что она запускается, и указать параметры в одной строке.Например, вы можете сделать ipconfig /all в CMD, и он запустит ipconfig.exe с опцией /all.Другим примером может быть shutdown -f, который сообщает компьютеру о необходимости выключения с параметром -f.Например, я хочу создать программу, которая загружает что-то с URL-адреса и называет это, например, загрузчиком.В командной строке можно было бы набрать downloader <a href="http://filehere.com" rel="nofollow">http://filehere.com</a> /h, что бы загрузить файл с параметром / h, который я бы определил в свой программе.Я не хочу код или руководства о том, как сделать загрузчик, я просто пытаюсь узнать, как указать параметры, такие как / h.Есть ли какие-либо руководства, о которых вы знаете и которые могли бы опубликовать, или какой-либо пример кода?Я пытался найти гиды, но думаю, что просто не знаю, как на самом деле называется эта операция.Спасибо.

Ответы [ 3 ]

2 голосов
/ 06 мая 2011

Функция main принимает два аргумента, традиционно называемые argc и argv:

int main (int argc, char * argv[])
{
    // ...
}

argc содержит число аргументов, переданных в командной строке, и argvмассив содержит такие аргументы (argv[0] - это имя, используемое для вызова вашей программы);последний элемент массива argv (то есть argv[argc]) содержит указатель NULL.

2 голосов
/ 06 мая 2011

В зависимости от вашего мастерства и склонности использовать указатели, вы можете предпочесть захватывать командную строку как vector<string>:

// UNTESTED CODE
int main(int argc, char **argv) {
  std::vector<std::string> args(argv+1, argv+argc);

  if(args.empty()) {
    std::cout << "Usage: downloader URL [options]\n";
    return 1;
  }
  if(std::find(args.begin(), args.end(), "/h") != args.end()) {
    option_h = true;
  }
  Download(args[0]);
}
2 голосов
/ 06 мая 2011

Вы обычно определяете свою функцию main для двух аргументов: int argc и char *argv[], например:

int 
main(int argc, char *argv[])
{
...

Первый аргумент - сколько параметров получила ваша программа, argv - указатель на них. Обратите внимание, это не обязательно, вы можете назвать их как хотите, но это соглашение. Просто убедитесь, что ваши типы совпадают.

Вы можете использовать библиотеку разбора опций, но она часто зависит от ОС. Один простой способ проверить, получил ли вы / ч:

int got_h = 0;
for (int i=0; i<argc; ++i)
   if (strcmp(argv[i], "/h") == 0)
      got_h = 1;
...
if (got_h)
   ...

argv[argc] всегда будет NULL, чтобы упростить их повторение.

Дополнительная информация здесь: http://www.site.uottawa.ca/~lucia/courses/2131-05/labs/Lab3/CommandLineArguments.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...