При автоматизированном создании консольного приложения в языке программирования С++, автоматически создается главная функция очень похожая на эту:
{…}
Заголовок функции содержит сигнатуру главной функции main() с аргументами argс и argv.
Если программу запускать через командную строку, то существует возможность передать какую-либо информацию этой программе. Для этого существуют аргументы командной строки argc и argv[].
Параметр argc имеет тип int, и содержит количество параметров, передаваемых в функцию main. Причем argc всегда не меньше 1, даже когда функции main не передается никакой информации, так как первым параметром считается полный путь приложения, включающий имя запускаемого файла.
Параметр argv[] представляет собой массив указателей на строки. Через командную строку можно передать только данные строкового типа.
При запуске программы через командную строку Windows с передачей аргументов, командная строка будет иметь вид:
Диск:\путь\имя.exe аргумент1 аргумент2 …
Аргументы командной строки разделяются одним или несколькими пробелами.
Если аргумент командной строки должен содержать внутри себя пробелы, то он записывается в кавычках. Сами кавычки экранируются.
Аргумент argv[0] содержит полное имя приложения:
2
3
4
5
6
7
8
9
10
11
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
system("chcp 1251");
system("cls");
for(int i=0; i<argc; i++)
cout << argv[i] << endl;
cin.get();
return 0;
}
Пример: вычисление произведения двух целых чисел.
В программе используется функция преобразования строки в целое число StrToInt() отсюда.
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <iostream>
using namespace std;
int StrToInt(char* s)
{
int temp = 0; // число
int i = 0;
int sign = 0; // знак числа 0- положительное, 1 — отрицательное
if (s[0] == '-')
{
sign = 1;
i++;
}
while (s[i] >= 0x30 && s[i] <= 0x39)
{
temp = temp + (s[i] & 0x0F);
temp = temp * 10;
i++;
}
temp = temp / 10;
if (sign == 1)
temp = -temp;
return(temp);
}
int main(int argc, char* argv[])
{
int a = 0, b = 0;
if (argc > 1)
a = StrToInt(argv[1]);
if (argc > 2)
b = StrToInt(argv[2]);
cout << a << "*" << b << "= " << a * b << endl;
cin.get();
return 0;
}
Запуск программы осуществляется как
Отладка программы с аргументами командной строки
Для передачи аргументов командной строки при отладке программы необходимо обратиться к меню Свойства проекта.
На вкладке Свойства конфигурации → Отладка выбрать Аргументы команды и задать их значения.
При запуске программы в режиме отладки введенные аргументы будут восприниматься программой как аргументы командной строки.
Очень долго искал информацию, как задавать аргументы с пробелами (к примеру, пути к файлам). Добавьте, вдруг понадобится людям: Либо в кавычках: "путь\путь путь.файл.расширение", либо пробел оформляем управляющим символом: \пробел. И спасибо большое за статью.