にちにちメモ

天文系大学院生のブログ。日々の生活の中で忘れがちなこと/忘れたくないことをメモ。

C言語でコマンドライン引数を使う

C言語で書いたプログラムをコマンドラインで実行するときに、
いくつかのパラメータや読み込むファイル名などを
引数として与えた方が便利な場合がある。
やり方(というよりプログラム側での変数名)をよく忘れるのでメモ。

 

[やり方]
int main(void){
...
}

int main(int argc, char *argv[]){...
}
とする。

注意すべきは、以下のこと。
argc: プログラム名も含む全引数の数
argv: プログラム名も含む引数へのポインタの配列。
   引数はすべて文字列として解釈される。
   文字列であるから、char型配列の中に一文字ずつ格納されるのだが、
   すべての引数についてその文字列を格納した変数を作る・操作するのは
   面倒なので、引数の先頭文字へのポインタを格納した「ポインタの配列」
   なる変数を作っている。

argv[i]は引数の先頭文字へのポインタだが、printfなどの場合は
先頭文字へのポインタを指定すればその文字列をすべて出力してくれる。("\0"が出てくるまでを一つのまとまった文字列として見てくれる。)
したがって、
printf("%s\n", argv[i]);
とすれば、i番目の引数を表示してくれる。

引数の内容を数値として扱いたい場合には、
文字列→浮動小数点型変換関数atof()や
文字列→整数型変換関数atoi()などが便利。

 

さて、この記事の本題。
argcやargvという変数名を忘れやすいので、どういう略からこの名前が来ているのかを調べてみた。
argc -> argument count
argv -> argument vector
らしい。
な、なるほど( ゚д゚)
意外と単純だった……。