C Academy · Урок

argc и argv

Читайте аргументы программы

Урок 1 из 413 шагов

«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 — локальная установка не требуется.

Все уроки этого курса

  1. argc и argv
  2. Разбор параметров
  3. getopt
  4. Создание инструмента CLI
← Назад к C Academy