コマンドライン


main()関数への引数

main()関数も「関数」なので当然引数を受け取ることができます
では、main()関数はどこから引数を受け取るのでしょうか?

VC++などのGUI(Windowsなどの、グラフィカルなインタフェイスのこと)での
総合開発環境を使っている人は、この章の理解は難しいかもしれません
main()関数は、実はコマンドラインから引数を受け取ることができるのです
実用的なアプリケーション開発を目指すならば、欠かせない知識ですね

そのため、この章で作ったプログラムの実行にはDOSプロンプトから引数を指定して実行する必要があります
コマンドライン恐怖症の方は、この機会にぜひ

main()関数には、二つの引数が渡されます
一つはコマンドラインから渡された引数の数
もう一つはコマンドライン引数で渡された文字列です
一般的には、第一仮引数をargc、第二仮引数をargvと呼びます
argcには引数の数が、argvには引数の文字列が入ります
そのため、普通は次のような形になります

一般的なmain()関数の仮引数
int main(int argc , char *argv[])

仮引数の名前は任意ですが、昔からこの名前を使うのが暗黙の了承になっているようです
他のプログラマさんにプログラムを見られることを意識してargc , argvを使用するのが無難なところです

ここの引数の内容にアクセスするには配列変数argvに添え字で指定すれば良いです
代表的なコマンドライン引数を受け取るサンプルプログラムをみてみましょう
#include<stdio.h>

int main(int argc , char *argv[]) {
        int count = 0;
        while (count < argc) {
                printf("第%d引数 = %s\n" , count + 1 , argv[count]);
                count++;
        }
        return 0;
}
コマンドライン引数の区切り部分はOSで異なるようですが、通常はスペースかタブで区切られます
上のプログラムをtest.cというファイル名でコンパイルし、test.exeというファイルを作成します
それを以下のようにコマンドラインで実行すると次のような結果になります

コマンドライン
C:\dir-name...\>test kitty on your lap

実行結果
第1引数 = C:\dir_name...\TEST.EXE
第2引数 = kitty
第3引数 = on
第4引数 = your
第5引数 = lap

Windows98SE MS-DOSプロンプトで動作確認

dir_name以降はtest.exeファイルまでのカレントディレクトリが表示されます
このようにして、コマンドラインから引数を受け取ることができます

ど〜してもコマンドラインはわからないという方は次のプログラムに書き換えてください
これをコンパイルしてできた実行ファイルに、何らかの(なんでも良いです)ファイルをD&Dしてください
実行ファイルはドロップされたファイルのパスを引数として受け取ります
#include<stdio.h>

int main(int argc , char *argv[]) {
        int count = 0;
        while (count < argc) {
                printf("第%d引数 = %s\n" , count + 1 , argv[count]);
                count++;
        }
        printf("Enter>");
        gets(argv);
        return 0;
}
gets()関数は、ただGUIですぐにプロンプトが閉じないようにするための足止めです
ファイルをD&Dすると、第2引数にファイルのフルパスが出力されます



前のページへ戻る次のページへ