mainの引数

C言語で作成した実行可能ファイル(createtble.exe)があるとすると、次のような実行を指定することが あります。(が入力です)

C:\work>createtble  test.html  5            

コマンドプロンプトでの実行させる1行をコマンドラインと呼び、 実行可能ファイル名の後に半角スペースで区切って入力している『test.html』や『5』を コマンドラインパラメタと呼びます。
この場合、コマンドラインパラメタの情報を 『createtble.exe』の実行プロセスに渡して実行させていることになります。
このコマンドラインパラメタの情報をの実行プロセスで利用する場合は、 main関数の引数で受け取れるように、次のようなmain関数にしなければなりません。
この変更だけで、コマンドラインパラメタの情報を使えるプログラミングができるようになります。

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

引数名は何でもよいのですが、慣例としてこの上記名前(argcやargv)を使うことが多いようです。
第1引数の argcは、コマンドラインに並べた文字列の総数が記憶されて実行されます。 上記の実行例では、『createtble』と『test.html』と『5』の3個なので3が記憶されています。
argv は、ポインタの配列を指し示すポインタです。 それぞれの要素に、各コマンドラインパラメタの文字列を指し示す情報が記憶されます。 この実行例では、次のようになります。

よってコマンドラインの情報を全て表示するプログラムは次のようになります。

main(int argc, char *argv[])
{
	int i;
	for( i=0; i %lt; argc; i++){
		printf("argv[%d]=%s\n", 	i, argv[i]);
	}
}

この実行例を以下に示します。

C:\work>createtble  test.html  5            
argv[0]=createtble
argv[1]=test.html
argv[2]=5
C:\work>

環境変数

コマンドプロンプトから起動するプログラムへ情報を渡す簡単にな方法で、 コマンドライン以外に環境変数があります。コマンドプロンプトで、
set 変数名=値 のキー入力で環境変数を設定できます。
(単にsetだけ入力すると、全ての環境変数を表示する指示になります。 その場合は、たくさんありすぎて分かりにくいでしょう)
そこでechoコマンドで環境変数を指定して確認するとよいでしょう。
echoは、コマンドプロンプト内の表示命令です。 windowsでは環境変数を、%で囲むことで、その記憶内容が表示できます。
以下はset命令で、htmfileの名前の環境変数にtest.htmlを設定して、 itemnumbの名前の環境変数に5を設定してから、 echoコマンドでそれぞれを表示している例です。

C:\work>set htmfile=test.html            

C:\work>set itemnumb=5            

C:\work>echo %htmfile%            
test.html

C:\work>echo 値は%itemnumb%です            
値は5です

C:\work>

C言語のプログラムでは、環境変数名を引数にして、その情報の文字列を取得する関数 getenvが用意されています(取得できない時の戻り値はNULLです)。 宣言されるヘッダーファイルはstdlib.hです。
以下に、簡単なプログラム例とその実行例を示します。

#include <stdio.h>
#include <stdlib.h>

main()
{
	char *s1 = getenv("htmfile");	
	char *s2 = getenv("itemnumb");
	if(s1 != NULL) printf("htmfile=%s\n", s1);
	if(s1 != NULL) printf("itemnumb=%s\n", s2);
}
C:\work>set htmfile=test.html

C:\work>set itemnumb=5

C:\work>createtble
htmfile=test.html
itemnumb=5

C:\workr>