重複の可能性があります:
main()の引数は何ですか?
int argc、char * argv []とはどういう意味ですか?
すべてのプログラムはmain(int argc, char *argv[])
定義から始まります。
意味がわからないプログラムでこれらの引数を使用しない場合に、なぜこれらの引数を使用するのかを誰かが説明できればとてもうれしいですか。なぜint main()
だけじゃないの?
プログラムの名前は*argv[]
の要素の1つで、argc
は*argv[]
の引数の数のカウントですか? *argv[]
に送られる他の引数は何ですか?どうやって送るの?
argc
の引数argv
およびmain
は、プログラムに引数を送る方法として使用されます。おそらく最も一般的な方法は、ユーザーが入力できる場所で古き良き端末を使用することです。 cat file
。ここでWord cat
はファイルを受け取り、それを標準出力(stdout
)に出力するプログラムです。
プログラムはargc
の引数の数とargv
の引数のベクトルを受け取ります。上記では、arg ument c ountは2になります(プログラム名は最初のものとして数えられます)。引数)とarg ument v ectorは[cat
、file
、null]を含みます。最後の要素はnullポインタです。
一般的には、このように書くでしょう:
int // Specifies that type of variable the function returns.
// main() must return an integer
main ( int argc, char **argv ) {
// code
return 0; // Indicates that everything went well.
}
プログラムが引数を必要としない場合は、以下のようにmain
-関数を書くことも同様に有効です。
int main() {
// code
return 0; // Zero indicates success, while any
// Non-Zero value indicates a failure/error
}
C言語の初期のバージョンでは、暗黙のとおり、int
の前にmain
はありませんでした。今日、これはエラーと見なされています。
POSIX - 準拠システム(およびWindows)では、プログラムのベクトルを含む3番目のパラメーターchar **envp
を使用する可能性があります env ironment変数main
関数の引数リストには他にもさまざまなバリエーションがありますが、非標準なのでここでは詳しく説明しません。
また、変数の命名はの規則であり、実際の意味はありません。あなたが他の人を混乱させないようにこれを守ることは常に良い考えですが、main
を次のように定義することは等しく有効です。
int main(int c, char **v, char **e) {
// code
return 0;
}
そしてあなたの2番目の質問のために、プログラムに引数を送るいくつかの方法があります。 POSIX - 標準である exec*()
ファミリーの関数 を見てみることをお勧めしますが、おそらくそれは簡単というだけです。 use system
("command arg1 arg2")
が、すべてのシステムで動作することが保証されていないため、system()
の使用は通常眉をひそめます。私は自分でテストしたことはありません。しかし、bash
、zsh
、または* NIXシステムにインストールされている他のシェルがない場合、system()
は失敗します。
これらは、プログラムが呼び出されたときに、たとえばコマンドラインからプログラムに引数を渡すためのものです。
$ gcc mysort.c -o mysort
$ mysort 2 8 9 1 4 5
上記では、プログラムmysort
がいくつかのコマンドラインパラメータで実行されています。 main( int argc, char * argv[])
の中では、これは
Argument Count, argc = 7
7つの引数があるので(プログラムを数える)
Argument Vector, argv[] = { "mysort", "2", "8", "9", "1", "4", "5" };
以下は完全な例です。
$ cat mysort.c
#include <stdio.h>
int main( int argc, char * argv [] ) {
printf( "argc = %d\n", argc );
for( int i = 0; i < argc; ++i ) {
printf( "argv[ %d ] = %s\n", i, argv[ i ] );
}
}
$ gcc mysort.c -o mysort
$ ./mysort 2 8 9 1 4 5
argc = 7
argv[ 0 ] = ./mysort
argv[ 1 ] = 2
argv[ 2 ] = 8
argv[ 3 ] = 9
argv[ 4 ] = 1
argv[ 5 ] = 4
argv[ 6 ] = 5
[char
の文字列 "2"、 "8"などは、文字から数字への変換関数を使って数字に変換することができます。 atol()
(link )]
argc
(引数の数)およびargv
(引数のベクトル)を使用すると、アプリケーションの起動時に渡された引数の数と値を取得できます。
この方法では、アプリケーションの起動時にパラメータ(-version
など)を使用して別の方法で動作させることができます。
しかし、Cのプロトタイプとしてint main(void)
を使うこともできます。
3番目の引数(envp
)を持つ3番目の(あまり知られていない、非標準の)プロトタイプがあります。環境変数が含まれています。
リソース:
argc
は、プログラムに渡される引数の数を意味します。 char* argv[]
は渡された引数です。 argv[0]
は常にプログラム名そのものです。 100%確信があるわけではありませんが、int main()
はC/C++で有効であると思います。
argc
は実行時にプログラムに与えられるコマンドライン引数の数です。そしてargv
はこれらの引数を含む文字配列の配列(むしろC文字列の配列)です。あなたがコマンドライン引数を必要としないことを知っているなら、代わりにvoid
引数を取ることであなたのmainを宣言することができます:
int main(void) {
/* ... */
}
これらは標準に従ってmain
に定義されている2つのプロトタイプだけですが、一部のコンパイラではvoid
の戻り型も許可されています。これについての詳細 ウィキペディア上 。
argc
はコマンドライン引数の数、argv
はコマンドライン引数を表す文字列の配列です。
これにより、プログラムに渡された引数に反応することができます。何も期待していないのなら、int main
を使うこともできます。
app -something -somethingelse
などのパラメータを使用してアプリケーションを実行できます。 int argc
はこれらのパラメータの数を表し、char *argv[]
は実際のパラメータがアプリケーションに渡される配列です。このようにして、あなたはあなたのアプリケーションの中で彼らと働くことができます。