1.コマンドライン引数の例
例1.メモ帳のコマンドに「hello.txt」という文字列をパラメータとして与えると「hello.txt 」を作成するかどうか確認するメッセージが出る
>notepad.exe hello.txt
例2.インターネットエクスプローラーをコマンドラインから実行する際にURLをパラメータとして与えると最初にそのページを開く
>"C:\Program Files\Internet Explorer\iexplore.exe" www.yahoo.co.jp
2.コマンドラインパラメータの受け取り方法
C言語ではコマンドラインからの引数を「引数の数」と
「引数の文字列の配列」という形で受け取ることができる。
main関数の定義を
int main(int argc, char *argv[])
のように main(int , 文字列の配列)とするとコマンドラインからの引数を取得することができる。
【注意】 int main(void) で定義するとコマンドライン引数は無視される。
argc は「引数の数」
*argv は「引数の文字列」
*argv[] は「引数の文字列の配列」
を意味する。
たとえば
>hello.exe abc def
としてプログラムを実行した場合
引数の数は「3」、
引数の文字列は「hello.exe」「abc」「def」として、プログラムが起動される。
演習1: helloparam.c (コマンドラインからパラメータ受け取り)
#include <stdio.h>
int main(int argc, char *argv[]){
int n;
for(n=0;n<argc;n++){
printf("param %d : %s\n",n,argv[n]);
}
}
C:\myc>helloparam.exe
param 0 : helloparam.exe
C:\myc>helloparam.exe abc def ←半角空白で区切られる
param 0 : helloparam.exe
param 1 : abc
param 2 : def
C:\myc>helloparam.exe "abc def" ←「"」で囲むと一つとして扱われる
param 0 : helloparam.exe
param 1 : abc def
C:\myc>helloparam.exe \"abc def\" ←「"」を渡したいときは前に「\」を入れる
param 0 : helloparam.exe
param 1 : "abc
param 2 : def"
C:\myc>helloparam.exe "\"abc def\""
param 0 : helloparam.exe
param 1 : "abc def"
演習2: mycalc.c (簡易電卓)
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]){
double ans,d1,d2;
char ope[80];
if(argc != 4){ // 引数が足りないのでエラー:使い方表示
printf("usage : mycalc 数値1 演算子 数値2\n");
printf("usage : mycalc 2 + 3\n");
exit(1);
}
// 【ポイント1】文字列を数値に変換
d1 = atof(argv[1]); // int から double に変換
d2 = atof(argv[3]); // int から double に変換
strcpy(ope,argv[2]);
// 演算子の長さ確認
if(strlen(ope)!=1){ // 演算子が1文字でなかったらエラー
printf("usage : 演算子が1文字でない\n");
exit(1);
}
switch (ope[0]){
case '+':
ans = d1 + d2;
break;
case '-':
ans = d1 - d2;
break;
case '*':
ans = d1 * d2;
break;
case '/':
if(d2 == 0.0) {ans = 0.0;} // 0で割り算できない
else{ ans = d1 / d2; }
break;
default:
printf("usage : 演算子が1文字でない\n");
exit(1);
}
printf("%f\n",ans);
}
演習2 実行例
C:\myc>mycalc.exe
usage : mycalc 数値1 演算子 数値2
usage : mycalc 2 + 3
C:\myc>mycalc.exe 2 + 3
5.000000
C:\myc>mycalc.exe 2 * 3
6.000000
C:\myc>mycalc.exe 2 / 3
0.666667
C:\myc>mycalc.exe 2 - 3
-1.000000
C:\myc>mycalc.exe 2 ++ 3
usage : 演算子が1文字でない
レポート
上記の演習1と演習2を作成してメールで提出