この記事では、C言語でコマンドライン引数を取得して処理を分岐させる方法について解説します。
目次から探す
コマンドライン引数の取得方法
コマンドライン引数とは、プログラムを実行する際にコマンドラインから渡されるパラメータのことです。
C言語では、«main関数»の引数として«argc»と«argv»を使用してコマンドライン引数を取得することができます。
argcとargvの概要
«argc»は、コマンドライン引数の数を表す整数型の変数です。
«argv»は、コマンドライン引数の値を表す文字列型の配列です。
«argv[0]»には、実行ファイルのパスが格納されます。
«argv[1]»以降には、コマンドライン引数が順番に格納されます。
以下は、«argc»と«argv»の使用例です。
int main(int argc, char *argv[]) {
// コマンドライン引数argument인수argumentargumentargumentargumentoStreitargumentargumentodiscussioneの数を表示Show number of command line arguments명령행 인수의 수 표시Vis antallet af kommandolinjeargumenterVisa antalet kommandoradsargumentToon het aantal opdrachtregelargumentenMostrar número de argumentos de linha de comandoAnzahl der Befehlszeilenargumente anzeigenAfficher le nombre d'arguments de ligne de commandeMostrar número de argumentos de línea de comandoMostra il numero di argomenti della riga di comando
printf("引数argument인수argumentargumentargumentargumentoStreitargumentargumentodiscussioneの数: %d\n", argc);
// コマンドライン引数argument인수argumentargumentargumentargumentoStreitargumentargumentodiscussioneの値を表示Show values of command line arguments명령행 인수의 값 표시Vis værdier af kommandolinjeargumenterVisa värden för kommandoradsargumentToon waarden van opdrachtregelargumentenMostrar valores dos argumentos da linha de comandoWerte von Befehlszeilenargumenten anzeigenAfficher les valeurs des arguments de ligne de commandeMostrar valores de argumentos de línea de comandoMostra i valori degli argomenti della riga di comando
for (int i = 0; i < argc; i++) {
printf("引数argument인수argumentargumentargumentargumentoStreitargumentargumentodiscussione%d: %s\n", i, argv[i]);
}
return 0;
}
上記のコードを実行すると、コマンドライン引数の数と値が表示されます。
サンプルコード
以下は、コマンドライン引数を取得して処理を行うサンプルコードです。
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[]) {
// コマンドライン引数argument인수argumentargumentargumentargumentoStreitargumentargumentodiscussioneが2つ以上指定されているかチェックCheck if two or more command line arguments are specified명령행 인수가 두 개 이상 지정되었는지 확인Tjek, om der er angivet to eller flere kommandolinjeargumenterKontrollera om två eller flera kommandoradsargument är angivnaControleer of er twee of meer opdrachtregelargumenten zijn opgegevenVerifique se dois ou mais argumentos de linha de comando foram especificadosÜberprüfen Sie, ob zwei oder mehr Befehlszeilenargumente angegeben sindVérifiez si deux arguments de ligne de commande ou plus sont spécifiésCompruebe si se especifican dos o más argumentos de línea de comandoControlla se sono specificati due o più argomenti della riga di comando
if (argc < 3) {
printf("引数argument인수argumentargumentargumentargumentoStreitargumentargumentodiscussioneが足りませんNot enough arguments인수가 부족합니다.Ikke nok argumenterInte tillräckligt med argumentNiet genoeg argumentenArgumentos insuficientesNicht genug ArgumentePas assez d'argumentsNo hay suficientes argumentosArgomenti insufficienti\n");
return 1;
}
// コマンドライン引数argument인수argumentargumentargumentargumentoStreitargumentargumentodiscussioneの比較Comparing command line arguments명령줄 인수 비교Sammenligning af kommandolinjeargumenterJämför kommandoradsargumentOpdrachtregelargumenten vergelijkenComparando argumentos de linha de comandoBefehlszeilenargumente vergleichenComparaison des arguments de ligne de commandeComparar argumentos de línea de comandoConfronto degli argomenti della riga di comando
if (strcmp(argv[1], "hello") == 0) {
printf("Hello, %s!\n", argv[2]);
} else if (strcmp(argv[1], "goodbye") == 0) {
printf("Goodbye, %s!\n", argv[2]);
} else {
printf("不明なコマンド:Unknown command:알 수 없는 명령:Ukendt kommando:Okänt kommando:Onbekend commando:Comando desconhecido:Unbekannter Befehl:Commande inconnue:Comando desconocido:Comando sconosciuto: %s\n", argv[1]);
}
return 0;
}
上記のコードでは、コマンドライン引数が2つ以上指定されているかをチェックし、指定されたコマンドに応じてメッセージを表示しています。
«strcmp関数»を使用して、文字列の比較を行っています。
実践例
以下は、実際にコマンドライン引数を使用して処理を分岐させる実践例です。
コマンドラインで以下のように実行すると、異なるメッセージが表示されます。
$ ./program hello John
Hello, John!
$ ./program goodbye Emily
Goodbye, Emily!
$ ./program unknown Alice
不明なコマンド:Unknown command:알 수 없는 명령:Ukendt kommando:Okänt kommando:Onbekend commando:Comando desconhecido:Unbekannter Befehl:Commande inconnue:Comando desconocido:Comando sconosciuto: unknown
以上がコマンドライン引数の文字列を比較して処理を分岐させる方法です。
コマンドライン引数を活用することで、プログラムの柔軟性を高めることができます。