Аргументы командной строки в C/C++

В этой статье мы рассмотрим, как можно использовать аргументы командной строки в C/C++.

Почему мы должны использовать аргументы командной строки?

Аргументы командной строки очень полезны, если вы хотите передать любые входные строки в свою основную программу из командной строки.

Эти аргументы передаются в качестве параметров функции main(). Рассмотрим, как их можно эффективно использовать.

Часто нам очень удобно напрямую вводить данные в нашу программу. Одним из распространенных способов является использование scanf() или getchar() и т.п. для ожидания ввода данных пользователем.

Но эти вызовы тратят много времени на ожидание и требуют, чтобы пользователь вводил данные вручную.

Мы можем сэкономить много времени, просто передав эти данные в нашу основную программу.

Формат будет чем-то вроде:

./executable input1 input2

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

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

Специальные переменные

Программа передаст аргументы командной строки в функцию main().

В С/С++ функция main() принимает два дополнительных параметра для этих аргументов.

  • argc -> Количество аргументов (Argument count). Дает количество аргументов, которые мы передаем (включая имя программы).
  • argv -> Argument vector. Это массив строк char*. Это сами значения аргументов.

Таким образом, argv[0] - это название самой программы, а argv[1]argv[argc-1] - это все наши аргументы командной строки.

int main(int argc, char* argv[]);

Чтобы увидеть это в действии, давайте рассмотрим пример.

Пример использования

Давайте рассмотрим программу, которая объединяет две строки, заданные в качестве входных данных.

Мы передадим в нашу программу два аргумента командной строки, поэтому общее argc должно быть 3 (включая имя программы).

Мы можем написать нашу программу так:

#include <iostream> 
#include <string>
 
using namespace std;
 
string concat_strings(string s1, string s2) {
    return s1 + s2;
}
 
int main(int argc, char* argv[]) 
{ 
    cout << "You have entered " << argc 
         << " arguments:" << "\n";
 
    if (argc != 3) {
        cerr << "Program is of the form: " << argv[0] << " <inp1> <inp2>\n";
        return 1;
    } 
 
    string result = concat_strings(argv[1], argv[2]);
 
    cout << "Result: " << result << endl;
 
    return 0; 
} 

Если исполняемое имя test.out, на компьютере с Linux запускаем исполняемый файл с помощью этой команды:

./test.out Hello _ArduinoPlus

Обратите внимание, что аргументы разделены пробелом. Таким образом у нас аргументы командной строки: «Hello» и «_ArduinoPlus».

На выходе получаем:

You have entered 3 arguments:                                                                                                
Result: Hello_ArduinoPlus

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

Попробуем теперь запустить программу с 4 аргументами.

./test.out Hello from ArduinoPlus

На выходе получаем:

You have entered 4 arguments:                                                                                                
Program is of the form: ./test.out <inp1> <inp2>

Действительно, программа выдает нам правильное сообщение об ошибке!

21 июля 2020 в 13:41 | Обновлено 7 ноября 2020 в 01:19 (редакция)
Опубликовано: | Оригинал
Статьи,

Добавить комментарий

Ваш E-mail не будет никому виден. Обязательные поля отмечены *