Аргументы командной строки в C: argc, argv и практические примеры
При запуске программы можно передать ей значения через командную строку. Они называются аргументами командной строки и позволяют управлять поведением программы без перекомпиляции.
Обработка происходит через параметры функции main:
int main(int argc, char *argv[])
- argc (argument count) — количество аргументов включая имя программы.
- argv (argument vector) — массив строк:
argv[0]— имя программы,argv[1]— первый аргумент, ...,argv[argc-1]— последний.
Базовый пример
#include <stdio.h>
int main(int argc, char *argv[]) {
if (argc == 2) {
printf("The argument supplied is %s\n", argv[1]);
} else if (argc > 2) {
printf("Too many arguments supplied.\n");
} else {
printf("One argument expected.\n");
}
return 0;
}
Запуск с одним аргументом:
$ ./a.out testing
The argument supplied is testing
Запуск с двумя аргументами:
$ ./a.out testing1 testing2
Too many arguments supplied.
Запуск без аргументов:
$ ./a.out
One argument expected.
Аргументы с пробелами
Аргументы разделяются пробелами. Если аргумент сам содержит пробелы, заключите его в кавычки:
$ ./a.out "testing1 testing2"
Пример с выводом имени программы
#include <stdio.h>
int main(int argc, char *argv[]) {
printf("Program name: %s\n", argv[0]);
if (argc == 2) {
printf("The argument supplied is %s\n", argv[1]);
} else if (argc > 2) {
printf("Too many arguments supplied.\n");
} else {
printf("One argument expected.\n");
}
return 0;
}
Результат:
$ ./a.out "testing1 testing2"
Program name: ./a.out
The argument supplied is testing1 testing2
Полезные советы
- Всегда проверяйте
argcперед доступом кargv[i]. - Аргументы приходят как строки — для чисел используйте
atoi,strtol,strtod. - В POSIX-системах
argv[argc]гарантированно равенNULL. - Для сложного разбора используйте
getopt/getopt_long(POSIX) или библиотеки вродеargp.
Язык C
- Понимание декодеров: типы, таблицы истинности и практические применения
- Аргументы функций в Python: позиционные, именованные и параметры по умолчанию
- Мастерство аргументов командной строки в Java: передача и разбор параметров
- Понимание эффективности линии: Ключевые метрики для производства печатных плат
- Производственные линии: как конвейеры обеспечивают эффективность производства
- Красные линии застройки: понятное руководство для собственников участков
- Мостовые отводы (Bridge Taps): как они влияют на качество телефонной связи
- Сборочный конвейер: как взаимозаменяемые части обеспечили эффективное массовое производство
- Точечные линии продольной резки: передовые автоматизированные системы раскроя рулонов
- Оптимизация линий химической упаковки: модернизация для времени работы и отслеживания OEE