コマンドプロンプトで指定されたパラメータを処理する

最終更新日:2004-07-22.

今回は、コマンドプロンプトで指定したパラメータを処理する方法についてちょっと。
Cではmain()というメインとなる関数が必ずあると書きました。
そして、プログラムはこの関数で始まり、この関数で終わるとのことです。
コマンドプロンプトで指定したパラメータは、この関数が受け取ります。
ということは、main()関数の引数ということです。
例えば、以下のようにします。
int main ( int argc, char **argv )
{
/* 任意の処理 */
return 0;/* 終了 */
}
上記の引数をみると分かるように、第1はパラメータの個数、
第2はそれぞれの文字列へのポインタです。
なお、上記の変数名argc, argvは任意の名前でよいです。
また、 char **argv の部分は char *argv[] でもよいようです。
パラメータの個数argcには、今実行しているプログラム自身も含まれます。
ということは、少なくともargcは1以上の値が入ります。
そして、第1のパラメータ、第2のパラメータが順にカウントされます。
さらに、最後に指定したパラメータの次になる文字(0x00)がセットされます。
例えば。
プログラム名がprog.exeで、パラメータがp1, p2の二つだとします。
このとき、argcの値は4で、prog.exe, p1, p2, NULLがセットされます。
これら4つの文字列を参照するには、
argv[0], argv[1], argv[2], argv[3]を使用します。
このargvは2次元配列へのポインタです。
上記の方法はそれぞれの文字列の先頭アドレスを指しています。
ということは、それぞれの文字列内の文字を指すこともできます。
argv[0][0], argv[0][1], ...
のようにすればよいですね。
では、ソースにしてみましょう。
+------------------------------------------------------------+
/* filename=no034-1.c */
/* include */
#include <stdio.h>
/* main */
int main(int argc, char **argv)
{
int i;
printf("argcは%dです。\n", argc);
for(i=0; i<=argc; i++){
printf("argv[%d]=%s\n", i, argv[i]);
}
printf("第1のパラメータ。\n");
i=0;
while( argv[1][i] ){
printf("argv[1][%d]=%c\n", i, argv[1][i]);
i++;
}
return 0;/* 終了 */
}
+------------------------------------------------------------+

上記をコンパイルして実行すると、以下のように表示されました。
argcは3です。
argv[0]=D:\C-MAG\PROG.EXE
argv[1]=P1
argv[2]=P2
argv[3]=(NULL)
第1のパラメータ。
argv[1][0]=P
argv[1][1]=1

戻る