ホームC言語Tips集インターフェース ≫ コマンドライン引数を利用してプログラムにデータを渡す

C言語Tips集 - コマンドライン引数を利用してプログラムにデータを渡す

コマンドライン引数 (command line parameter) とは,プログラムの実行時に渡される引数のことをいいます. 例えば,コマンドライン引数を利用できる a.out というプログラムにコマンドライン引数を渡すには以下のように入力します.

./a.out 引数1 引数2 ... 引数n

実装方法

コマンドライン引数を受け取るプログラムを書きたい場合は,main 関数に引数を用意します.一般に引数は以下の2通りの方法で記述します.

int main(int argc, char *argv[])
int main(int argc, char **argv)

引数 argc には main 関数に渡された引数の数に +1 された値が格納されます.
引数 argv は main 関数に渡された引数の文字列を指すポインタの配列です.ただし,0番目の要素にはプログラム名を指すポインタが格納されます.
例えば,

./a.out Snoopy Joe Cool

と入力した場合は,それぞれの変数には以下のように格納されます.

argc: 4
argv[0]: "a.out" の先頭アドレス
argv[1]: "Snoopy" の先頭アドレス
argv[2]: "Joe" の先頭アドレス
argv[3]: "Cool" の先頭アドレス

C言語サンプルプログラム

コマンドライン引数を利用して,簡易版 mv コマンドを作成するサンプルプログラムを以下に示します.

/* header files */
#include <stdio.h>
#include <stdlib.h>

/* main */
int main(int argc, char *argv[]) {
    /* コマンドライン引数の数のチェック */
    if ( argc != 3 ) {
        fprintf(stderr, "引数の数が不正です.\n");
        exit(EXIT_FAILURE);
    }

    /* rename 関数でファイルを移動(リネーム)する */
    if ( rename(argv[1], argv[2]) == 0 ) {
        printf("%sを%sに変更しました.\n", argv[1], argv[2]);
    } else {
        fprintf(stderr, "%sの変更に失敗しました.\n", argv[1]);
    }

    return EXIT_SUCCESS;
}

実行例

このサンプルプログラムをコンパイルして作成された実行ファイル (My-mv.out) と同じディレクトリに Snoopy.txt という名前のファイルがあったとします.
コンソールから以下のコマンドを入力します.

./My-mv.out Snoopy.txt JoeCool.txt

実行結果は以下のようになります.

Snoopy.txtをJoeCool.txtに変更しました.

Cプログラマの必読書

たくさんあるC言語関連の書籍の中でも特に役に立った本です.よかったら参考にしてみてください.

C実践プログラミング 第3版

C言語の実践的参考書.少々値段は張りますが初心者を脱しようとしている人は絶対に読むべきです.
文法だけでなく,コーディングスタイルやデバッグなど文字通り「実践的」なことが書かれているので非常にためになります. オライリーの本は,読みにくい本が多いのですが本書はとても読みやすくオススメです.


C言語ポインタ完全制覇 (標準プログラマーズライブラリ)

ポインタの解説書としては最高の書籍です.
この1冊でポインタを完全に理解することができます.全くの初学者が読むには敷居が高いですが,入門書を読み終えた後に読むと非常に有益です.