C Аргументы командной строки
При выполнении программы значения можно передать C-программе из командной строки. Эти значения называютсяаргументами командной строкиОни важны для программы, особенно когда вы хотите управлять программой извне, а не жёстко задавать эти значения в коде.
В языке C аргументы командной строки — это способ получения входных данных из командной строки, который можно использовать для передачи информации программе при её запуске. Аргументы командной строки передаются программе через параметры функции main. Прототип функции main может быть одной из следующих двух форм:
int main(int argc, char *argv[]);
или:
int main(int argc, char **argv);
argc(количество аргументов): указывает количество аргументов командной строки, включая само имя программы. Следовательно,argcПо крайней мере 1.argv(вектор аргументов): это указатель на массив строк, где каждая строка — аргумент командной строки. Первый элемент массива (т. е.,argv[0]) обычно является именем программы. Следующие элементы — это аргументы командной строки, переданные программе.
Ниже приведён простой пример, который проверяет, были ли предоставлены аргументы командной строки, и выполняет соответствующие действия на основе аргументов:
Пример
int main( int argc, char *argv[] )
{
if( argc == 2 )
{
printf("Переданный аргумент: %s\n", argv[1]);
}
else if( argc > 2 )
{
printf("Передано слишком много аргументов.\n");
}
else
{
printf("Ожидался один аргумент.\n");
}
}
Используя один аргумент, скомпилируйте и выполните приведённый выше код, он выдаст следующий результат:
$./a.out testing The argument supplied is testing
Используя два аргумента, скомпилируйте и выполните приведённый выше код, он выдаст следующий результат:
$./a.out testing1 testing2 Too many arguments supplied.
Если не передавать аргументы, скомпилируйте и выполните приведённый выше код, он выдаст следующий результат:
$./a.out One argument expected
Следует отметить, чтоargv[0]хранит имя программы,argv[1]— указатель на первый аргумент командной строки, а *argv[n] — последний аргумент. Если аргументы не переданы, argc будет равен 1; в противном случае, если передан один аргумент,argcбудет установлен в 2.
Несколько аргументов командной строки разделяются пробелами, но если сам аргумент содержит пробелы, то при передаче аргументов следует заключить аргумент в двойные кавычки "" или одинарные кавычки ''. Перепишем приведённый выше пример: есть пробел, тогда можно, с этой точки зрения, заключить их в двойные кавычки или одинарные кавычки "". Перепишем приведённый выше пример, чтобы передать в программу аргумент командной строки, заключённый в двойные кавычки:
Пример
int main( int argc, char *argv[] )
{
printf("Имя программы %s\n", argv[0]);
if( argc == 2 )
{
printf("Переданный аргумент: %s\n", argv[1]);
}
else if( argc > 2 )
{
printf("Передано слишком много аргументов.\n");
}
else
{
printf("Ожидался один аргумент.\n");
}
}
Используя простой аргумент, разделённый пробелом, при этом аргумент заключён в двойные кавычки, скомпилируйте и выполните приведённый выше код, он выдаст следующий результат:
$./a.out "testing1 testing2" Progranm name ./a.out The argument supplied is testing1 testing2
Сценарий использования
Аргументы командной строки полезны во многих ситуациях, например:
- Путь к файлу конфигурации
- Выбор режима (например, режим отладки)
- Имена входного и выходного файлов
- Параметры времени выполнения и флаги (например,
-vуказывает подробный режим)
Примечания
- Аргументы командной строки обычно являются строками; если вам нужно преобразовать их в числовые типы, вы можете использовать стандартные библиотечные функции, такие как
atoiилиstrtol。 - Вы всегда должны проверять и обрабатывать аргументы командной строки, чтобы предотвратить некорректный или вредоносный ввод.