コマンドライン引数を使う
これまでのコードでは、読み書きするファイル名はすべて「test●.txt」などというあらかじめ決められたファイル名を使ってきました。しかし、プログラムを実行するときに、読み書きするファイル名をユーザが指定できれば、より便利なプログラムになることでしょう。
C言語では、ユーザが指定した文字列を実行時に受け取る仕組みとしてコマンドライン引数(command line argument)と言う機能を使うことができます。コマンドライン引数は、次のようなmain()関数の引数のかたちで文字列を受け取るものです。
コマンドライン引数
int main(int argc, char *argv[])
{
...
}
argc: 入力した文字列の個数を受け取ります
argv: 入力した文字列を受け取ります
以下のファイルを事前にコンパイル点リンク後に作成された実行プログラム(.exeファイル)と同じディレクトリに用意してください。
#include <stdio.h>
int sample16(int argc, char *argv[])
{
FILE* fp;
char ch;
if ( argc !=2 )
{
printf("パラメータの数が違います。\n"); //入力した文字列の個数を調べます
return 1;
}
fp = fopen(argv[1], "r"); //入力した2番目の文字列(ファイル名)を指定して、ファイルをオープンします
if (fp == NULL)
{
//オープンできないときのエラー処理
printf("ファイルをオープンできませんでした。\n");
return 1;
}
while ( (ch=fgetc(fp)) != EOF )
{
putchar(ch); //ファイルの終端まで1文字ずつ読み込みます
}
printf("\n");
fclose(fp); //ファイルをクローズする
printf("ファイルをクローズしました。\n");
return 0;
}
実行結果:
E:\099_Technology\C\c_learn_jp\Debug>lesson12.exe myfile.txt
A long time ago,
There was a little girl.
ファイルをクローズしました。
argc=2; // コマンドライン引数の数
argv[0]=”lesson12.exe”;
argv[1]=”myfile.txt”;
重要
コマンドラインから引数を渡すことができる。
バッチアプリの作成によく使われ、「アプリ名」+「引数」の使い方によって、アプリが共通化することも可能になる。
コメント