int型のmain(int型のargc、char型* ARGV [])のコメントについて

通常、VS環境では、常に突然原則とこれら2つのパラメータの役割を知りたいので、次の情報を確認し、今日、これら2つのパラメータの主な機能が表示されます。本当に教えてくれました。

ます。http://hi.baidu.com/sgglong70626/item/8881322b2dce21c1ee10f11e次のブログは、オリジナルのリンク、Baiduの中に神のために大きな空間を見ることです

ARGCコマンドラインパラメータの総数   
のargv []は、最初のパラメータは、ユーザ入力に続いて、コマンドラインパラメータのためのパラメータの後、プログラムの0フルネームである、コマンドラインパラメータに格納されている文字列へのポインタであるARGVパラメータコマンドライン文字列のポインタのアレイ、各ストリング(列処理パラメータが基準である)最初のアドレスの各要素。ポインタの配列の長さは、パラメータARGCの数です。最初の配列要素は、システムによって自動的に与えられます。例:   
int型のmain(int型ARGC、チャーは* ARGV [])   
{   
私はINTは、   
のために(I = 0;私は<ARGC; I ++)   
COUT << ARGV [I] << ENDL;   
CIN I >>は、   
0を返します;   
}   
実行ノック   
Fを:\ mYDOCU〜1つの\ TEMPCODE    \ D1 \ DEBUG \ D1.EXE AAAA BBB CCC DDD
出力を次のように:   
。F:\ mydocu 1〜\ TEMPCODE \のDI \ DEBUG \ D1.EXE   
AAAA   
BBBの   
CCCの   
DDD   
--- -------------------------------------------------- ---------------
するchar * argvの[]は、そのサイズ[]パラメータargvを主にコマンドライン引数に使用されるint型ARGC、ある文字の配列であり、各配列要素は、パラメータを表します。 ;
たとえば、入力   
TC bcのテストACを    ARGC = 4    のargv [0] = "テスト"    のargv [1] = "AC"    のargv [2] = "BC"    のargv [3] = "TC" ------ -------------------------------------------------- -----------------------------------   のargcでプログラムを実行するには、コマンドラインでユーザーが入力したパラメータを記録番号。   引数[]配列は、Arg [0]。彼は通常、プログラムの実行可能ファイルのファイル名を指す少なくとも一つの文字ポインタを指摘しました。コンパイラの一部のバージョンでは、プログラムに含まれて配置されているファイルのパス。-------------------------------------------------- ----------------------- 実行可能プログラムを呼び出すときに、あなたは、特定の状況下でプログラムにパラメータを渡す必要があります。私たちは、コンソールにnotepad.exeを入力することができた場合は、実行後、メモ帳プログラムを入力します。我々は同時に開いているメモ帳でテキストファイルを開きたい場合は、メモ帳ができます   (ファイルへの電流経路で)、そのようなメモ帳、EXAMPLE.SQLとして、ファイルのパスと名前の後ろに追いつきます。   どのようにプログラムは、これらの入力パラメータを得ることができますか?この作品は、私たちはコンパイラを完了するに役立つ情報の入力パラメータのコンパイラです

















パラメータ主な機能のリストに追加します。   

入力パラメータに格納された情報の主な機能パラメータリストは、レコードARGC最初のパラメータは、入力パラメータの数は、   
2番目のパラメータは文字列の配列であり、各文字列配列を指し、char *型のユニットでありますCスタイルの文字列。   
実施例でメモ帳、EXAMPLE.SQL   
ARGC 2であり、それはargv配列は、2つの単位た上で有効である   
文字列が最初のユニットによって指し示さ「メモ帳」である   
第二部によって指された文字列は「で、EXAMPLE.SQL」である   

ARGV呼び出されたときにユニットが文字列パラメータに転換点になった後、配列の最初の要素は、プログラムの文字列常に実行可能ファイル名を指摘しました。   

この割り当てプロセスが完了コンパイラで、我々はそれだけでデータを読み取るが必要です。
-------------------------------------------------- ---------------------------

INTメイン(int型ARGC、CHAR * ARGV []、CHAR * envpを[])   
main()関数は、一般にint型形状または無効使用。私は、int型のメインの定義を使用することを好みます。なぜなら、オペレーティングシステムの終了時に性能を表すための値に戻すことができます。   

ARGC int型   
パラメータの数がある場合、コマンドラインでコマンドを入力するために使用このようなもの。さんがあなたのコンパイラの実行可能ファイルがTEST.EXE後にしましょう   
D:\ TC2>テスト   
この時間は、ARGCの値が1である   
が、   
D:\ TC2> TEST.EXE myarg1 myarg2   
、次いでARGCの値は3です。これは、三つのパラメータの合計二つのパラメータを持つコマンド名で   

のchar * ARGV []   
このパラメータは、あなたが入力したものを取得するために使用される   
D:\ TC2>テスト   
この時間は、ARGCの値が1である、ARGV [0]の値"TEST"である   
D:\ TC2>テストmyarg1 myarg2   
このとき、ARGCの値が3で、ARGC [0]の値が"テスト"、ARGC値[1] "myarg1"であり、ARGCである[2]値"myarg2"です。   
その上のデータファイル名、および:このようなものは、一般的に非常に重要なプログラムなどの情報を提供するために使用されます。   
以下のような:B.TXT交流をコピーし   
、今回の交流や、いわゆるB.TXT「非常に重要な情報を。」これら二つの文書は、あなたがコピーすることはできません、指定しないでください。   
あなたのプログラムは、単にARGCの値を判定することにより、ARGCを使用して、これら2つのパラメータをargvをするときは、プログラムのパラメータを見てみましょう要件を満たし   

CHAR * envpを[]は   
このようなものが未満と比較的です。環境変数、システムを取得するために使用されます。   
以下のような:DOSでは、PATH変数があります。このコマンドを入力するとするときDOSプロンプト、DOSが最初にカレントディレクトリに、このコマンドファイルを実行になります(もちろん、これは、DIRは内部秩序の一種のコマンドではありません)。ない場合は、実行を見つけ、ため、次のパスをPATHが定義された外観は、戻り不良コマンドまたはファイル名を見つけることができません   
DOSでシステムを参照してくださいするように設定タイプは、プロンプトの環境変数をコマンド   
同様に、UNIXまたはLinuxの下で、そこにシステム環境変数があり、DOSよりも使用します。その上、通常の$ PATHとしては、$ USER、$ HOMEのと。   
envpをすべての環境変数を保存します。フォーマット(UNIX下)   
PATH =は/ usr / binに、/ local / binに、   
HOME = /ホーム/ shuui   
すなわち:   
環境変数名=値   
DOSの下では、おそらく同じです。   
環境変数は、一般的に、プログラムの追加情報を提供するために使用されています。たとえば、プログラムのテキストの内容を表示します。あなたは、その行に表示される文字の数を制御します。あなたは、環境変数(UNIXの下に)自分自身を定義することができます   
%ののsetenv NUMBER = 10   
$エコー%のNUMBER   
10   
と、あなたはプログラムでこの環境変数を読み取ることができます。その後、出力のラインは、その値に基づいてどのように多くの文字を決定します。あなたは、環境変数を変更しない場合は、この方法では、その後、あなたがこのプログラムを実行するたびに、1行に表示される文字の数は同じではありません   
ここではプログラムの一例である   

/ * argtest.c * /   
<stdio.hに>する#include   
(int型メインARGCのINT、CHAR * ARGV []は、CHAR * envpを[])   
{   
私はint型。   

printf(のargc、 "あなたは合計%d個のargmentsがn \ inputedています");   
用(i = 0; iは<ARGC; iは++)   
{   
のprintf( "引数%D:%のSの\ n"、I、ARGV [I])。   
}   

のprintf( "追跡がenvpをある:の\ n");   
(; * envpを[I] = '\ 0';!私++はI = 0)のための   
{   
のprintf( "%Sの\ n"、envpを[I])。   
}   
0を返します。   
}   


D:\>このargtestは's)は(主argmentsの試験programeで   
9 argmentsあなたがトータルinputedた   
D:ARG0は\ TC \ NONAME.EXE   
ARG1:この   
ARG2は:であり   
:ARG3   
ARG4:試験   
引数5:   
の:Arg6   
Arg7:メイン()「S   
ARG8:argments   
フォローのがenvpをIS:   
TMP = C:WINDOWS \ TEMP \   
TEMP = C:WINDOWS \ TEMP \   
PROMPT = $ P $ G   
WinBootDir = C:WINDOWS \   
PATH = C: \ WINDOWS; C:WINDOWS \ COMMAND \   
WINDOWS \ COMMAND.COM \:COMSPEC = C   
\ SBPCI:SBPCI = C   
WINDIR = C:WINDOWS \   
BLASTER = I7のDI A220 P330 H7 T6   
CMDLINE = NONAME(このメインのテストprograme機能IS )「S argments     
---------------------------------------------- -------------------------------------------
コマンドラインはああパラメータ。ARGV []は、パラメータ、ARGV [0]、ARGVファイル名で、パラメータの数がARGCである[1]第一引数である...   
あなたがexeファイルのファイル名がある場合:MYPROG.EXEを、その後、   
12 22 32をMYPROG   
次いでARGV [0] = "MYPROG"、のargv [1] =、ARGV "12は" [2] = "22は" ...   

と、プログラムが終了出口()はリターンコードです。適切に終了するかどうかを判断するために、他のプログラムによって受信することができます。そのような出口として(-1)異常終了を検討しました。
-------------------------------------------------- -------------------------------------------

ここで、なぜこれらの2つの設定を依頼します引数それ?それをしないのですか?ありがとう、
時々 、プログラムが実行されているいくつかのパラメータを提供する必要があります。例えば、コピーコマンド、あなたはargcとargvのを通過する必要があり、送信元と送信先ファイル名を指定する必要があります

 

1、int型のmain(int型のargc、 char型*のARGV) とint型のmain(int型のargc、char型** argvの) 違いは?

     

メインint型(int型のargc、char型* ARGV)

  のargc:整数、あなたがプログラムに統計的なライン引数の数を実行したときにコマンドを与える

  * ARGV:あなたの引数を指すように文字列を格納するために使用される文字列、各要素パラメータの点

  で動作するプログラムを指すのargv [0]フルパス名

  ARGVの列の[1] DOSコマンドライン実行プログラム名を指し

  実行可能ファイル名文字列への第2の点後のargv [2]

     

  INTメイン(int型のargc、char型** argvの ) メインint型(int型のargc、char型* ARGV [])に対応し

     たargc:あなたは、コマンドライン引数の数をカウントするために使用されたプログラムを実行する際の整数、与えた

  文字列:* ARGVをあなたの文字列パラメータを指し示す格納するために使用される、パラメータを指し、各要素

  のargv [1]プログラム名の最初の文字列にDOSコマンドライン実行ポインタをポイントする

  ポイント後にプログラム名のARGV実行[2] 2つの文字列のポインタ

      int型のmain(int型ARGC、チャー**で ARGV) のargv [1]コンテンツを格納されたアドレスへのポインタ、及びメインINT(INTのARGC、チャーである

       ARGVで* ARGV)1 ]配列要素(個人的な理解)であります

 私たちの主な機能は、多くの場合、パラメータを指定せずに使用されています。メインブラケットが空になった後ので括弧。実際には、パラメータを取ることができます主な機能は、このパラメータは、main関数の引数の形と考えることができます。C言語で指定されたパラメータのみが2つの主要な機能を持つことができ、これら2つのパラメータのargcとargvを書くことが通例です。したがって、第一の機能の主な機能は以下のように書くことができる:メイン(ARGCは、ARGV)C言語はまた、文字列へのポインタでなければならない整数変数、ARGV(第2パラメータ)でなければならないARGC(最初のパラメータ)を提供します配列。パラメータ記述を追加した後、第一の機能の主な機能は次のように書かれる:  
メイン(ARGC、ARGV)
ARGV INT;
charは* ARGV [];または書き込み:
メイン(int型ARGCが、文字*はARGV [])
  主な機能のでをすることはできません他の関数呼び出しは、内部手続きの実際の値を得ることは不可能です。だから、それの主な関数の引数のパラメータ値は?実際には、パラメータ値の主な機能は、オペレーティング・システムのコマンドラインから取得されています。我々は、実行可能ファイルを実行するDOSプロンプトでファイル名を入力し、その後、これらの引数の実際のパラメータを入力したいときに行くことを主なパラメータに転送することができます。

  コマンドラインDOSプロンプトの一般的な形式は:C:\>実行可能ファイル名パラメータ......、それは特に注意すべきことは、コマンドラインでメイン2つの形状パラメータおよびパラメータ
位置は一から一ではありません。ので、主なパラメータは、コマンドラインでパラメータの数は、原則として、2つだけではなく、制限です。ARGCパラメータは、コマンドライン引数の数を示している(注:ファイル名自体をパラメータと考えることができる)、ARGCの値が与えられた実引数の数に応じて自動的にシステムでコマンドラインを入力します。例えば、コマンドライン:C:\> E6 24 BASICのdBASE FORTRAN ファイル名ためE6 24自体をパラメータと考えることができるが、そう四つのパラメータの合計が、そうARGC 4の値を達成しました。パラメータへのポインタのargv配列は、コマンドライン、各列(列処理パラメータが基準である)最初のアドレスの各要素である文字列です。ポインタ配列の長さはパラメータの数です。最初の配列要素は、システムによって自動的に与えられます。図6.8は、ことを示している:
メイン(int型ARGC、CHAR * ARGV){
一方(ARGC - > 1)
のprintf( "%S \のN-"、ARGV * ++);
}
この例では、コマンドライン入力であります実施形態e24.exeという名前のパラメータの実行ファイルならば、Aは、ディスク・ドライブに保存されています。
したがって、コマンドライン入力:C:\> A:E24   BASICのdBASE FORTRANの
実行結果:
BASIC
のdBASE
FORTRAN
  銀行がメインの実行は、4つの引数を有し、ARGC 4の初期値です。ARGV 4つの要素が最初のアドレス4つの文字列に分割されています。従って、停止サイクル等しいARGV 1、3サイクルの合計3つの出力パラメータの合計1つによって文の実行、各サイクルのargv値つつ。最初の印字文字列BASICのargv [1]を参照するようにprintf関数では、印刷アイテムので* ++ argvは、、その後、最初の印刷を1だけインクリメントとされます。第二に、3サイクル後に、2つの文字列がそれぞれ印刷されています。E24のパラメータは、ファイル名で、あなたが出力する必要はありません。

  コマンドラインは、2つのある実施形態パラメータ、nは入力された第2パラメータ20の値です。* ++文字列「20」、ステートメントながらループ制御変数のプログラム値にARGVは、偶数整数としてそれを変更する機能「ATOI」により20を出力します。
#include "STDLIB.H"
メイン(int型ARGC、CHAR * ARGV []){
int型A = 0、N-;
N- = ATOI(* ++ ARGV);
一方(N--)のprintf( "%のD"、A ++ * 2);
}
  このプログラムであっても出力nは0から開始されます。ポインタ変数が別のポインタ変数のアドレスに格納されている場合、ポインタ変数へのポインタは、ポインタ変数は、ポインタ変数へのポインタと呼ばれています。

  我々はすでに短期訪問の間の間接的なアクセスと呼ばれるポインタ変数、を介してアクセスし、導入しています。変数への直接ポインタ変数ので、それほど間の単一レベルの訪問と呼ばれます。ポインタ変数がアクセスする場合、2つの以上の段階の間のポインタ変数である訪問を構成しています。解決策は、したがって、めったに2回の訪問の間よりも、あまりにも多くを理解することは容易ではないではありませんが、また、誤りを生じやすい時にC言語のプログラムでは、相互訪問の制限のシリーズは明確ではないが、訪問の間の段数。ポインタ変数へのポインタの一般的な形態を説明する:  
型指定**ポインタ変数名;  
例:int型** PP、PPは、他のポインタ変数を指すポインタ変数を表しており、この変数は整数量を指すポインタであります。ここでは、この関係を説明するための一例です。
メイン(){
int型X、P *、** PP;
X = 10;
P = X&;
PP =&P;
のprintf( "%のD = X \ N-"、PP **);
}  
  プログラム例では、整数xをポイントポインタ変数pは、PPは、ポインタ変数pポインタ変数です。PPの変数xを介してアクセスするには、**頁に書かれています。Xは、プログラム10の最終的な出力です。上記の例により、読者は、命令とポインタ変数へのポインタを使用することを学ぶことができます。

  まず、以下の定義は、プログラムポインタ配列の初期化PSを記述し、割り当てを行いました。そしてそれは、PPSを示しポインタ変数へのポインタです。サイクル5では、PPSは、PS [0]、PS [1行った ]、PS [2]、PS [3]、PS [4] (図6.10に示されている)アドレス値。次に、これらのアドレスを通じて文字列を見つけることができます。
メイン(){
静的CHAR * PS [] = { "基本"、 "DBASE"、 "C"、 "FORTRAN"、
"PASCAL"};
** PPSをchar型、
I int型;
(I = 0;私は<5 ; I ++){
PPS + PS = I;
のprintf( "%S \のN-"、* PPS);
}
}
このプログラムは、ポインタ変数へのポインタをプログラムされ、複数のストリングを出力します。

 

オリジナルリンク:int型のmain(int型のargc、char型*のARGV [])コメントについて - hust_archer - ブログhttps://www.cnblogs.com/ruixingw/p/3705918.htmlパーク

おすすめ

転載: www.cnblogs.com/tongongV/p/10961250.html