コマンドライン引数 (command line parameter) とは,プログラムの実行時に渡される引数のことをいいます. 例えば,コマンドライン引数を利用できる a.out というプログラムにコマンドライン引数を渡すには以下のように入力します.
./a.out 引数1 引数2 ... 引数n
コマンドライン引数を受け取るプログラムを書きたい場合は,main 関数に引数を用意します.一般に引数は以下の2通りの方法で記述します.
int main(int argc, char *argv[])
int main(int argc, char **argv)
引数 argc には main 関数に渡された引数の数に +1 された値が格納されます.
引数 argv は main 関数に渡された引数の文字列を指すポインタの配列です.ただし,0番目の要素にはプログラム名を指すポインタが格納されます.
例えば,
./a.out Snoopy Joe Cool
と入力した場合は,それぞれの変数には以下のように格納されます.
argc: 4
argv[0]: "a.out" の先頭アドレス
argv[1]: "Snoopy" の先頭アドレス
argv[2]: "Joe" の先頭アドレス
argv[3]: "Cool" の先頭アドレス
コマンドライン引数を利用して,簡易版 mv コマンドを作成するサンプルプログラムを以下に示します.
/* header files */
#include <stdio.h>
#include <stdlib.h>
/* main */
int main(int argc, char *argv[]) {
/* コマンドライン引数の数のチェック */
if ( argc != 3 ) {
fprintf(stderr, "引数の数が不正です.\n");
exit(EXIT_FAILURE);
}
/* rename 関数でファイルを移動(リネーム)する */
if ( rename(argv[1], argv[2]) == 0 ) {
printf("%sを%sに変更しました.\n", argv[1], argv[2]);
} else {
fprintf(stderr, "%sの変更に失敗しました.\n", argv[1]);
}
return EXIT_SUCCESS;
}
このサンプルプログラムをコンパイルして作成された実行ファイル (My-mv.out) と同じディレクトリに Snoopy.txt という名前のファイルがあったとします.
コンソールから以下のコマンドを入力します.
./My-mv.out Snoopy.txt JoeCool.txt
実行結果は以下のようになります.
Snoopy.txtをJoeCool.txtに変更しました.
たくさんあるC言語関連の書籍の中でも特に役に立った本です.よかったら参考にしてみてください.
C言語の実践的参考書.少々値段は張りますが初心者を脱しようとしている人は絶対に読むべきです.
文法だけでなく,コーディングスタイルやデバッグなど文字通り「実践的」なことが書かれているので非常にためになります.
オライリーの本は,読みにくい本が多いのですが本書はとても読みやすくオススメです.
ポインタの解説書としては最高の書籍です.
この1冊でポインタを完全に理解することができます.全くの初学者が読むには敷居が高いですが,入門書を読み終えた後に読むと非常に有益です.