C言語の基礎
前へ 目次へ 次へ 

5-3 main関数に引数を渡す

 C言語で作成したプログラムを実行すると、まず関数mainから実行される。この関数mainに値を渡すこともできる。
 作成したプログラムをtestとし、このtestの関数mainにAB, CD, 12のデータを渡したい場合、実行するときに次のようにする。

test AB CD 12
実行するプログラム名  プログラムに渡したいデータの並び

 データが複数の場合はスペースまたはタブで区切る。コマンドラインに書いた文字列(test AB CD EF)が、次のように

コマンドライン

メモリに格納され、関数mainに渡される。

 数値も文字列としてメモリに格納される。関数mainには、これらの文字列の個数とそれぞれの文字列のアドレスが渡される。したがって関数mainでは次のようにデータを受け取るようにする。

main(int argc, char *argv[])

 変数argcには4が格納される。argvには2次元配列として文字列が格納される。


argv[0] = 80 argv[0][0] = 71 (t)
argv[0][1] = 65 (e)
argv[0][2] = 70 (s)
argv[0][3] = 71 (t)
argv[0][4] = 0
argv[1] = 85 argv[1][0] = 41 (A)
argv[1][1] = 42 (B)
argv[1][2] = 0
argv[2] = 88 argv[2][0] = 43 (C)
argv[2][1] = 44 (D)
argv[2][2] = 0
argv[3] = 8B argv[3][0] = 31 (1)
argv[3][1] = 32 (2)
argv[3][2] = 0
 配列名argvは、2次元配列の先頭アドレスである。すなわち、配列argv[0]のデータ(アドレス80番地)が記憶されているアドレスを表すことになる。
 配列argvに1を加算すると、配列argv[1]のデータが記憶されているアドレスになる。


**argv     → argv[0][0]のデータを表す。
**(argv + 1) → argv[1][0]のデータを表す。
*(*argv + 1) → argv[0][1]のデータを表す。

 コマンドラインを表示するプログラムを作成してみよう。

/* sample46.c */
#include <stdio.h>
int main(int argc, char *argv[])
{
  int i;
  for(i = 0; i < argc; ++i)
  printf("argv[%d]=%s\n", i, argv[i]);
}

 コマンドラインの整数値の和を計算するプログラムを作成してみよう。

/* sample47.c */
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
  int i, wa = 0;
  for(i = 0; i < argc; ++i)
    wa = wa + atoi(argv[i]);
  printf("WA=%d\n", wa);
}


前へ 目次へ 次へ 
Copyright © 2001 Hiroshi Masuda 

 

 

inserted by FC2 system