Аннотация: В лекции необходимо изучить способы передачи аргументов командной строки операционной системы Windows в программу, в которой предусмотрено считывание количества аргументов и вывод имен этих аргументов с возможностью запуска приложений (аргументов).
Теоретическая часть
Аргумент командной строки – это информация , которая вводится в командной строке операционной системы вслед за именем программы [21.1].
В системных средах, поддерживающих язык программирования С, существует способ передавать в программу аргументы или параметры командной строки при запуске программы на выполнение [21.2]. Для этого в главную функцию main() включают два аргумента, обычно argc и argv. Первый (от argument count – счетчик аргументов) содержит количество аргументов командной строки , с которыми была запущена программа . Второй (от argument vector – вектор аргументов) указывает на массив символьных строк, содержащих сами аргументы, – по одному в строке. В общем случае имена аргументов могут быть произвольными.
Язык Си с нуля — Урок 54 — аргументы командной строки.
Формально можно определить следующий прототип функции main() с параметрами:
int main (int argc, char *argv[]);
Второй параметр функции main() выражает собой многоуровневую систему указателей. В связи с этим можно определить другой способ задания параметров функции main(), а именно
int main (int argc, char **argv);
Каждый указатель на значение типа char ссылается на одну из строк командной строки, при этом argv[0] указывает на имя команды (исполняемой программы), argv[1] – на первый аргумент командной строки, argv[2] – на второй аргумент и так далее [21.3].
В качестве принимаемых аргументов командной строки могут быть исполняемые файлы. Можно из программы запустить на выполнение другую программу, запустить новый процесс. Для этого существуют специальные функции библиотеки «C Run–Time Library Reference » системы Visual Studio (которую используем в качестве компилятора языка С ).
Командная оболочка операционной системы Windows использует интерпретатор команд cmd.exe, который загружает приложения и направляет поток данных между приложениями, для перевода введенной команды в понятный системе код. Консоль командной строки присутствует во всех версиях операционных систем Windows .
В среде разработки MS Visual Studio 2010 аргументы командной строки можно задать в самой среде, для чего следует произвести соответствующую настройку. Например, предположим, что мы хотим создать проект под именем tcmd, чтобы он принимал аргументы командной строки , например, » Example 1″ и E:forma.exe. Для этого после (или во время) создания проекта обратиться к закладке, показанной на рис. 21.1.

Рис. 21.1. Пример настройки и задания аргументов командной строки
Параметры или аргументы командной строки должны вводиться через пробелы. В случае, если параметр представляет собой строку с пробелами, то его следует взять в двойные кавычки.
argc argv c++ что это. Параметры функции main argc argv. Аргументы main. C ++ Урок #70
Использование указанной возможности интегрированной среды разработки позволяет произвести отладку программы с аргументами командной строки. В дальнейшем задание параметров в соответствии с рис. 21.1 не обязательно. Программа должна сама подхватывать аргументы командной строки , определенные с помощью утилиты cmd.exe (просто cmd) операционной системы.
Командную строку операционной системы Windows можно запустить следующими способами:
- Пуск
Программы (все программы)
Стандартные
Командная строка - Пуск
Выполнить
(ввести) cmd
Параметры, представленные на рис. 21.1, можно ввести из командной строки операционной системы Windows , как показано на рис. 21.2.

Рис. 21.2. Пример ввода аргументов командной строки Windows
Если подготовлена программа , в которой функция main() принимает два аргумента, то из командной строки можно передать, например, некоторые исполняемые файлы, такие как notepad.exe, winword.exe, чтобы можно было открыть «Блокнот» или документ » Word «.
Практическая часть
Пример 1. Напишите программу с аргументами командной строки, в которую передайте строки «Hello, world», «D:forma.exe», «MS Visual Studio 2010», «D:knapsack.exe», » команда cmd», где исполняемый файл «forma.exe» обеспечивает форматированный вывод случайных чисел, распределенных по нормальному закону, исполняемый файл «E:knapsack.exe» решает задачу о рюкзаке (см.Тему 18).
Аргументы командной строки определите в среде MS Visual Studio 2010. Прежде чем реализовать программный код решения примера, приведем программный код для исполняемого файла «forma.exe». Программный код форматированного вывода случайных чисел:
// Файл main.c программы forma (forma.exe) #include #include #include #include #include #include #include #include #include #include int main (void) < int i, j; double nd, md, fd, posd; double factor = 1.23; int n, m, f, pos; // row, column, floor point, distance int in = 0; double **A = NULL; double S = 0.0; double V1, V2, R1, R2; double tmax, tmin; char *smax, *smin; FILE *fid; errno_t err; time_t t; setlocale(LC_ALL, «rus»); setlocale(LC_NUMERIC, «uk»); srand((unsigned)time( // рандомизация случайных чисел printf(«n Введите количество строк двумерного массива: «); in = scanf_s(«%lf», if (in != 1) < printf(«n Ошибка ввода. Нажмите любую клавишу: «); _getch(); exit(1); >if ( nd < 1.0 || floor(nd) != nd ) < printf(«n Ошибка!
Количество строк массива должно быть натуральным числом.n Нажмите любуюу клавишу: «); _getch(); exit(1); >if (nd > (double)(INT_MAX/10000) ) < printf(«n Слишком большое число. Нажмите любую клавишу: «); _getch(); exit(1); >printf(» Введите количество столбцов двумерного массива: «); in = scanf_s(«%lf», if (in != 1) < printf(«n Ошибка ввода. Нажмите любую клавишу: «); _ getch(); exit(1); >if ( md < 1.0 || floor(md) != md ) < printf(«n Ошибка!
Количество столбцов массива должно быть натуральным числом.n Нажмите любуюу клавишу: «); _getch(); exit(1); >if (md > (double)(INT_MAX/10000) ) < printf(«n Слишком большое число. Нажмите любую клавишу: «); _getch(); exit(1); >printf(» Введите произвольное действительное число: «); in = scanf_s(«%lf», if (in != 1) < printf(«n Ошибка ввода.
Нажмите любую клавишу: «); _getch(); exit(1); >if ( factor > (double)(INT_MAX/1000) || factor < (double)(INT_MIN/1000)) < printf(«n Слишком большое число. Нажмите любую клавишу: «); _getch(); exit(1); >if ( factor < (10000.0*DBL_EPSILON ) factor >-(10000.0*DBL_EPSILON ) ) < printf(«n Слишком малое число. Нажмите любую клавишу: «); _getch(); exit(1); >printf(» Введите количество цифр после десятичной точки: «); in = scanf_s(«%lf», if (in != 1) < printf(«n Ошибка ввода.
Нажмите любую клавишу: «); _getch(); exit(1); >if ( fd < 0.0 || fd >14) < printf(«n Количество цифр должно лежать в диапазоне [0; 14]. n Нажмите любую клавишу: «); _getch(); exit(1); >if ( floor(fd) != fd ) < printf(«n Количество цифр должно быть целым числом в диапазоне [0; 14].n Нажмите любую клавишу: «); _getch(); exit(1); >printf(» Введите минимальное количество позиций между столбцами массива: «); in = scanf_s(«%lf», if (in != 1) < printf(«n Ошибка ввода. Нажмите любую клавишу: «); _getch(); exit(1); >if ( floor(posd) != posd ) < printf(«n Количество позиций должно быть целым числом в диапазоне [1; 10].n Нажмите любую клавишу: «); _getch(); exit(1); >if ( posd < 0.0 || posd >10.0) < printf(«n Количество позиций должно лежать в диапазоне [1; 10].n Нажмите любую клавишу: «); _getch(); exit(1); >f = (int)fd; pos = (int)posd; n = (int)nd; m = (int)md; A = (double **)malloc(n*sizeof(double *)); for (i = 0; i < n; i++) A[i] = (double *)malloc(m*sizeof(double)); // Заполнение матрицы по нормальному закону // метод Марсальи-Брея S = 1.0; for (i = 0; i < n; i++) < for (j = 0; j < m; j++) < while (S >= 1.0) < R1 = (double) rand()/RAND_MAX; R2 = (double) rand()/RAND_MAX; V1 = 2.0*R1 — 1.0; V2 = 2.0*R2 — 1.0; S = (V1*V1 + V2*V2); >A[i][j] = factor * V1 * sqrt(-2.0*log(S)/S); S = 1.0; > > tmax = tmin = A[0][0]; for (i = 0; i < n; i++) for (j = 0; j < m; j++) if (tmax < A[i][j]) tmax = A[i][j]; for (i = 0; i < n; i++) for (j = 0; j < m; j++) if (tmin >A[i][j]) tmin = A[i][j]; smax = (char *)malloc((pos+f+(int)INT_MAX/10000 )*sizeof(char)); sprintf_s(smax, (pos+f+(int)INT_MAX/10000 — 1),»%0.*f»,f,tmax); smin = (char *)malloc((pos+f+(int)INT_MAX/10000 )*sizeof(char)); sprintf_s(smin, (pos+f+(int)INT_MAX/10000 — 1),»%0.*f»,f,tmin); // int n, m, f, pos; // row, column, floor point, distance in = (strlen(smin) > strlen(smax)? strlen(smin): strlen(smax)); if ((in+pos)*m < 80) < puts(«n Пример форматированного вывода числовой матрицы:»); for (i = 0; i < n; i++) < puts(«»); for (j = 0; j < m; j++) printf(«%*.*f», in + pos, f, A[i][j]); >puts(«»); > else if ((in+pos)*m < 1000) < if ( (err = fopen_s(format.txt», «w»)) != 0 ) < printf(«n Файл для записи «format.txt» не может быть открыт.n Нажмите любую клавишу: «); _getch(); exit(1); >fprintf(fid, «rnt Пример форматированного вывода числовой матрицы: rn»); fprintf(fid, «rn Матрица размера %dx%d из нормально распределенных случайных чисел,rn умноженных на число %g. Количество цифр после десятичной точки: %drn Количество позиций между числами: %drn»,n,m,factor,f,pos); for (i = 0; i < n; i++) < fprintf(fid, «rn»); for (j = 0; j < m; j++) fprintf(fid, «%*.*f», in + pos, f, A[i][j]); >fprintf(fid, «rn»); printf(«n Результат смотрите в файле «format.txt»n» ); fclose(fid); > else < printf(«n Результат не может быть форматированно выведенn в текстовый документ или на консоль для заданногоn количества столбцов, величины поля между числамиn и количеством знаков после десятичной точки.n»); printf(«n Нажмите любую клавишу: «); _getch(); exit(1); >printf(«nn . Нажмите любую клавишу: «); _getch(); return 0; >
Источник: intuit.ru
Доступ к аргументам командной строки в C++
При запуске консольных приложений очень часто используются аргументы (опции) команды — они указываются через пробел после имени запускаемого файла. Например:
программа arg1 arg2 arg3
Рассмотрим, как передать аргументы команды в программу C++ и как получить доступ к аргумент командной строки из программы C++.
Чтобы в программе на C++ прочитать переданные аргументы, замените строку объявления главной функции:
int main ()
на следующую строку:
int main (int argc, char *argv[])
Переменная argc, которая представляет собой целое число (int), содержит количество переданных аргументов. А сами аргументы содержатся в элементах массива с обозначениями argv[1], argv[2], argv[3] и так далее.
Элемент массива argv[0] будет содержать имя самой программы.
Продемонстрируем это следующей простой программой:
#include #include using namespace std; int main (int argc, char *argv[])
Скомпилируйте и запустите её примерно следующим образом:
./a.out 12345 «Второй аргумент» ‘Последний аргумент’
Результат работы программы:
Всего передано аргументов: 4 Значение первого аргумента: 12345 Значение второго аргумента: Второй аргумент Значение третьего аргумента: Последний аргумент Имя файла программы: ./a.out
Аргументы командной строки разделяются пробелом, если вы хотите передать аргумент с пробелом, например «hello world», то используйте кавычки.
Смотрите также онлайн учебник «Основы С++».
Связанные статьи:
- Почему в C++ для double в числе только 5 цифр после запятой (72.2%)
- Как ввести в cin строки с пробелами в С++ (72.2%)
- Сравнение char со строкой в C++ (72.2%)
- Как в Bash реализовать «Нажмите любую кнопку для продолжения» (55.6%)
- Как создавать диалоговые блоки в интерактивных shell скриптах (50%)
- Что такое ZSH и почему его следует попробовать в качестве альтернативы Bash? (RANDOM — 5.6%)
Источник: zalinux.ru
Передача аргументов командной строки
Только начинаю изучать С++ и ещё не освоилась в Visual Studio. Хочу программе передать аргументы (строку, например), как это сделать в Visual Studio?
Отслеживать
51.1k 83 83 золотых знака 263 263 серебряных знака 501 501 бронзовый знак
задан 23 мар 2012 в 17:30
1 1 1 серебряный знак 2 2 бронзовых знака
2 ответа 2
Сортировка: Сброс на вариант по умолчанию

Спасибо всем:) ответ на мой вопрос на рисунке.
Отслеживать
ответ дан 3 июн 2015 в 14:00
21 2 2 бронзовых знака
- Выбрав проект в Обозревателе решения, в меню Проект выберите команду Свойства.
- Перейдите на вкладку Отладка.
- В поле Аргументы командной строки введите аргументы командной строки, которые будут использоваться.
Отслеживать
ответ дан 23 мар 2012 в 17:42
34.3k 25 25 золотых знаков 95 95 серебряных знаков 213 213 бронзовых знаков
- c++
- visual-studio
-
Важное на Мете
Связанные
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Источник: ru.stackoverflow.com