C 言語におけるコマンドライン引数の解析

CCBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

このプロジェクトでは、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 でさらに多くの実験を行って練習してください。