argc и argv
Читайте аргументы программы
«argc и argv» — бесплатный урок C Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения C Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс C Academy содержит 4 уроков всего.
Программы получают аргументы
При запуске программы из терминала ей можно передать дополнительные слова, называемые аргументами командной строки.
C передаёт их в main через два параметра: argc (количество аргументов) и argv (массив аргументов).
#include <stdio.h>
int main(int argc, char *argv[]) {
printf("This program received %d arguments\n", argc);
return 0;
}Сигнатура main
Полная форма main:
int main(int argc, char *argv[])
argc — количество аргументов. argv — массив указателей на строки, по одному на каждый аргумент.
#include <stdio.h>
int main(int argc, char *argv[]) {
printf("argc = %d\n", argc);
return 0;
}argv[0] — имя программы
Первый элемент, argv[0], — это имя (или путь), использованное для запуска программы.
Поэтому значение argc не меньше 1, даже если пользователь не передал дополнительных аргументов.
#include <stdio.h>
int main(int argc, char *argv[]) {
printf("Program name: %s\n", argv[0]);
return 0;
}Вывод всех аргументов
Можно пройти в цикле от индекса 0 до argc - 1, чтобы обратиться к каждой строке-аргументу в argv.
#include <stdio.h>
int main(int argc, char *argv[]) {
for (int i = 0; i < argc; i++) {
printf("argv[%d] = %s\n", i, argv[i]);
}
return 0;
}argv завершается NULL
Согласно стандарту C, argv[argc] гарантированно является указателем NULL.
Это означает, что можно выполнять цикл до встречи с NULL, не используя argc, хотя подсчёт с помощью argc встречается чаще.
#include <stdio.h>
int main(int argc, char *argv[]) {
char **p = argv;
while (*p != NULL) {
printf("%s\n", *p);
p++;
}
return 0;
}Аргументы всегда являются строками
Каждый аргумент передаётся как строка, даже если это число. Если пользователь передаёт 42, Вы получаете текст "42", а не целое число.
Преобразовать его самостоятельно можно с помощью таких функций, как atoi или strtol.
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
if (argc > 1) {
int n = atoi(argv[1]);
printf("Number plus one is %d\n", n + 1);
} else {
printf("Pass a number\n");
}
return 0;
}Проверка количества аргументов
Всегда проверяйте argc перед чтением argv[i]. Обращение к индексу за пределами переданных аргументов приводит к неопределённому поведению.
Обычно проверяют, передано ли достаточно аргументов, и в противном случае выводят сообщение об использовании.
#include <stdio.h>
int main(int argc, char *argv[]) {
if (argc < 2) {
printf("Usage: %s <name>\n", argv[0]);
return 1;
}
printf("Hello, %s!\n", argv[1]);
return 0;
}Использование ненулевого кода завершения
Если аргументы указаны неверно, верните из main ненулевое значение, чтобы сообщить оболочке о сбое.
По соглашению 0 означает успех, а любое другое значение — возникновение ошибки.
#include <stdio.h>
int main(int argc, char *argv[]) {
if (argc != 3) {
printf("Need exactly 2 arguments\n");
return 1;
}
printf("Got both arguments\n");
return 0;
}Суммирование числовых аргументов
Практический пример: сложить все числа, переданные в командной строке, преобразуя каждое с помощью atoi и накапливая общую сумму.
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
int sum = 0;
for (int i = 1; i < argc; i++) {
sum += atoi(argv[i]);
}
printf("Sum = %d\n", sum);
return 0;
}Альтернативная запись argv
Вместо char *argv[] можно встретить char **argv. В качестве параметра функции они означают одно и то же: указатель на первый указатель на строку.
Обе записи позволяют обращаться к элементам по индексу с помощью argv[i].
#include <stdio.h>
int main(int argc, char **argv) {
if (argc > 1)
printf("First arg: %s\n", argv[1]);
return 0;
}Вывод аргументов обратно
Классическая команда echo просто выводит свои аргументы. Ниже приведена минимальная версия, объединяющая их пробелами.
#include <stdio.h>
int main(int argc, char *argv[]) {
for (int i = 1; i < argc; i++) {
printf("%s", argv[i]);
if (i < argc - 1) printf(" ");
}
printf("\n");
return 0;
}Быстрая проверка
Проверьте, насколько хорошо Вы поняли argc и argv.
Повторение
Вы узнали, как программы считывают ввод из командной строки:
main(int argc, char *argv[])получает количество элементов и массив.- argv[0] — имя программы; настоящие аргументы начинаются с индекса 1.
argv[argc]имеет значение NULL.- Аргументы всегда являются строками; преобразуйте числа с помощью
atoiи сначала проверьтеargc.
Изучай C с ИИ-репетитором — бесплатно
Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.
- Курсы
- 39
- Уроки
- 144
Часто задаваемые вопросы
Урок «argc и argv» бесплатный?
Да — полный текст урока «argc и argv» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс C Academy, подпишись на CoddyKit PRO. Курс C Academy содержит 4 уроков всего.
Чему я научусь в уроке «argc и argv»?
Читайте аргументы программы Ты практикуешь C Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать C Academy?
Предыдущий опыт не требуется. C Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «argc и argv»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке C Academy?
Да. Каждый урок C Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.