В этой статье мы рассмотрим, как можно использовать аргументы командной строки в 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>
Действительно, программа выдает нам правильное сообщение об ошибке!