Разбор аргументов командной строки на C

CCBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом проекте вы научитесь анализировать и обрабатывать аргументы командной строки в программе на C. Это фундаментальный навык в разработке программного обеспечения, так как многие программы принимают и обрабатывают аргументы командной строки для настройки их поведения.

👀 Предварительный просмотр

$ gcc cmd.c -o cmd
$./cmd --arg1 1 --arg2 demo --arg9 labex
arg1:1
arg2:demo
arg9:labex

🎯 Задачи

В этом проекте вы научитесь:

  • Как создать файл на C и написать базовую структуру программы на C
  • Как анализировать аргументы командной строки и извлекать имена параметров и их значения
  • Как выводить имена и значения параметров в требуемом формате

🏆 Достижения

После завершения этого проекта вы сможете:

  • Разобраться в концепции аргументов командной строки и как их использовать в программе на C
  • Реализовать программу, которая может анализировать и обрабатывать аргументы командной строки
  • Применить свои знания языка программирования C для решения практической задачи

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL c(("C")) -.-> c/ControlFlowGroup(["Control Flow"]) c(("C")) -.-> c/CompoundTypesGroup(["Compound Types"]) c(("C")) -.-> c/FunctionsGroup(["Functions"]) c(("C")) -.-> c/FileHandlingGroup(["File Handling"]) c(("C")) -.-> c/UserInteractionGroup(["User Interaction"]) c/ControlFlowGroup -.-> c/if_else("If...Else") c/ControlFlowGroup -.-> c/for_loop("For Loop") c/CompoundTypesGroup -.-> c/strings("Strings") c/FunctionsGroup -.-> c/function_declaration("Function Declaration") c/FunctionsGroup -.-> c/function_parameters("Function Parameters") c/FileHandlingGroup -.-> c/create_files("Create Files") c/UserInteractionGroup -.-> c/user_input("User Input") c/UserInteractionGroup -.-> c/output("Output") subgraph Lab Skills c/if_else -.-> lab-301497{{"Разбор аргументов командной строки на C"}} c/for_loop -.-> lab-301497{{"Разбор аргументов командной строки на C"}} c/strings -.-> lab-301497{{"Разбор аргументов командной строки на C"}} c/function_declaration -.-> lab-301497{{"Разбор аргументов командной строки на C"}} c/function_parameters -.-> lab-301497{{"Разбор аргументов командной строки на C"}} c/create_files -.-> lab-301497{{"Разбор аргументов командной строки на C"}} c/user_input -.-> lab-301497{{"Разбор аргументов командной строки на C"}} c/output -.-> lab-301497{{"Разбор аргументов командной строки на C"}} end

Создайте файл на C

В этом шаге вы создадите файл на C для программы с аргументами командной строки.

  1. Откройте терминал и перейдите в каталог проекта:
cd ~/project
  1. Создайте новый файл на C с именем cmd.c в каталоге проекта:
touch cmd.c
  1. Откройте файл cmd.c в текстовом редакторе и добавьте следующий код:
#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[]) {
    // Ваш код будет здесь
    return 0;
}

Это базовая структура программы на C, которая будет обрабатывать аргументы командной строки.

Реализуйте разбор аргументов командной строки

В этом шаге вы реализуете логику для разбора аргументов командной строки и вывода имен и значений параметров.

  1. В функции main() добавьте цикл для перебора аргументов командной строки:
for (int i = 1; i < argc; i++) {
    // Ваш код будет здесь
}

Цикл начинается с индекса 1, потому что argv[0] содержит имя программы.

  1. Внутри цикла проверьте, начинается ли текущий аргумент с --:
if (strncmp(argv[i], "--", 2) == 0) {
    // Аргумент - это параметр
    char *param = argv[i] + 2; // Удалите ведущие "--"
    char *value = NULL;

    // Проверьте, есть ли значение после параметра
    if (i + 1 < argc && strncmp(argv[i + 1], "--", 2)!= 0) {
        value = argv[i + 1];
        i++; // Пропустите аргумент со значением
    }

    printf("%s:%s\n", param, value);
}

Этот код извлекает имя и значение параметра из аргументов командной строки и выводит их в требуемом формате.

  1. Финальный код выглядит так:
#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[]) {
    for (int i = 1; i < argc; i++) {
        if (strncmp(argv[i], "--", 2) == 0) {
            char *param = argv[i] + 2; // Удалите ведущие "--"
            char *value = NULL;

            // Проверьте, есть ли значение после параметра
            if (i + 1 < argc && strncmp(argv[i + 1], "--", 2)!= 0) {
                value = argv[i + 1];
                i++; // Пропустите аргумент со значением
            }

            printf("%s:%s\n", param, value);
        }
    }

    return 0;
}
  1. Сохраните файл cmd.c.

Скомпилируйте и запустите программу

В этом шаге вы скомпилируете программу на C и запустите ее с некоторыми примерами аргументов командной строки.

  1. Скомпилируйте файл cmd.c:
gcc cmd.c -o cmd

Это создаст исполняемый файл с именем cmd.

  1. Запустите программу с некоторыми примерами аргументов командной строки:
./cmd --arg1 1 --arg2 demo --arg9 labex

Вы должны увидеть следующий вывод:

arg1:1
arg2:demo
arg9:labex
  1. Попробуйте запустить программу с некоторыми повторяющимися параметрами:
./cmd --testarg1 1 --testarg2 demo --testarg1 labex

Вы должны увидеть следующий вывод:

testarg1:1
testarg2:demo
testarg1:labex

Поздравляем! Вы успешно реализовали программу для разбора аргументов командной строки.

✨ Проверить решение и практиковаться

Резюме

Поздравляем! Вы завершили этот проект. Вы можете практиковаться в более многих лабораторных работах в LabEx, чтобы улучшить свои навыки.