1. コマンドライン引数とは
実は main関数にも引数を渡すことができます。 この main関数に渡す引数のことを「コマンドライン引数」といいます。
2. main関数に引数を渡す方法
main関数へ渡せる引数は、
- 引数の総個数
- 引数の文字列を指すポインタの配列
の2つです。一般的に、
int main(int argc, char *argv[]) と記述し、
- int argc: 引数の総個数(プログラム名も含む)
- char *argv[]: 引数の文字列を指すポインタの配列を表します。
とりあえず、下の例を見てみましょう。
#include <stdio.h>
int main(int argc,char *argv[])
{
int i;
printf("引数の総個数 = %d\n", argc);
for (i = 0; i < argc; i++) {
printf("%d番目の引数 = %s\n", i, argv[i]);
}
return 0;
}
このプログラムの名称を「sample.c」とし、次の手順で実行するものとします。
- コンパイル、リンクして、「sample.exe」を作成する。
- 引数として「ABC DEF GHI」を指定することとし、
sample ABC DEF GHI とコマンドラインから入力する。 - 実行結果を確認する。
【実行結果例】

※ 処理系によって実行結果が異なる場合があります。
これはつまり、main(int argc, char *argv[]) に次のように引数が渡ったことを表します。

〇 演習問題
問1
次のプログラムの空欄部を埋めて、プログラムを完成させなさい。
#include <stdio.h>
#include <stdlib.h>
int main(__________)
{
int sum;
if (________ != 3 ) { // 引数の個数をチェック
puts("引数の個数が違います");
return 0; // エラーなら処理を打ち切り
}
sum = atoi(_________) + atoi(_________); // 文字列を数値にして合計をとる
printf("合計 = %d\n", sum);
return 0;
}
【実行結果例】(引数:21 42のとき)

問2
プログラム起動時に入力された複数個の文字列の文字数(’\0’は除く)を数えて、例のように文字列とともに表示するプログラムを作成しなさい。
なお、プログラムは次の2つの関数を含まなければならない。
1. 文字数を数える関数:1つの文字列のアドレスを受け取り、その文字列の文字数を返す。
2. 文字列を表示する関数:1つの文字列のアドレスと文字数を受け取り、これを表示する。
【実行結果例】

解答例
// 問1
#include <stdio.h>
#include <stdlib.h> // atoi関数を使用するためにインクルード
int main(int argc, char *argv[])
{
int sum;
if (argc != 3 ) { // 引数の個数をチェック
puts("引数の個数が違います");
return 0; // エラーなら処理を打ち切り
}
sum = atoi(argv[1]) + atoi(argv[2]); // 文字列を数値にして合計をとる
printf("合計 = %d\n", sum);
return 0;
}
// 例2
#include <stdio.h>
int get_n(char *pa);
void print_data(char *pa, int n);
int main(int argc, char *argv[])
{
int n;
for (int i = 1;i < argc; i++) {
n = get_n(argv[i]);
print_data(argv[i], n);
}
return 0;
}
/***
文字数を数える関数
引数:char *pa; 文字列を指すポインタ
返却値:文字数
***/
int get_n(char *pa)
{
int count = 0;
while(*pa != '\0'){
count++;
pa++;
}
return count;
}
/***
文字列を表示する関数
引数:char *pa; 文字列を指すポインタ
int n; 文字数
返却値:なし
***/
void print_data(char *pa, int n)
{
printf( "\"%s\" は %d 文字です。\n", pa, n);
}
コメント