C言語のargc、argv と Javaのargsの違い

C言語ではmain関数の引数にargcとargvを使います。

C言語
int main( int argc, char *argv[] ) ・・

Javaではmainメソッドの引数にはargsを使います。

Java
public static void main( String[] args ) ・・

プログラムに与えたパラメータをこれらのargvやargsを使って取得できるのですが、argvやargsに入る配列の中身はC言語とJavaでは異なります。C言語の場合は1つ目の引数を取得するにはargv[1]となりますが、Javaの場合はargs[0]となります。

また引数の個数を取得する場合もC言語の場合はargcを使いますが、Javaの場合はargs.lengthを使います。

sample1というプログラムがあり、パラメータに aa と bb を与えたとします。

実行例(C言語)
$ sample1 aa bb

実行例(java)
$ java sample1 aa bb

C言語ではaaを取得するにはargv[1]、bbを取得するにはargv[2]となります。なお、argv[0]ではプログラム名(sample1)が取得できます。Javaではaaを取得するにはargs[0]、bbを取得するにはargs[1]となります。

まとめるとこんな感じです。

実際にサンプルプログラムを作ってmain関数(mainメソッド)の引数をたどってみました。

C言語のサンプルプログラム(sample1.c)です。


#include <stdio.h>

int main( int argc, char *argv[] )
{
	int i;

	for( i = 0; i < argc; i++ )
		printf( "%s\n", argv[i] );
	
	return 0;
}

実行結果は以下となります。

$ gcc sample1.c -o sample1
$ sample1 aa bb
sample1
aa
bb

Javaのサンプルプログラム(sample1.java)です。


public class sample1
{
	public static void main( String[] args )
	{
		int i;
		
		for( i = 0; i < args.length; i++ )
			System.out.println( args[i] );	
	}
}

実行結果は以下となります。

$ javac sample1.java
$ java sample1 aa bb
aa
bb

C言語のプログラマはJavaをやるときに覚えおきましょう。