[Powered by Google Translate] [コマンドライン引数]
[クリストファー·バーソロミュー - ハーバード大学]
[これはCS50です - CS50.TV]
プログラムのための便利な機能は、ユーザー入力を受け入れることです。
これまでのところ、我々は、CS50ライブラリ内の一部の機能を探求してきた
など、ユーザー入力を受け付けるようにする "とは、文字列を取得する"
アプリケーションが起動している状態でこれは文字列のために、ユーザーに入力を求めます。
>> しかし、あなたのプログラム入力を提供したい場合があります
それが実際に実行される前に。
このように、あなたはあなたのユーザーから追加情報を求める必要がない
単純なタスクを実行中。
たとえば、mvを取るか、またはUNIXのコマンドを移動します。
このコマンドは、ユーザがある場所から別の場所にファイルを移動することができます。
マニュアルページによると、mvは、2つのコマンドライン引数を受け付けます。
そのファイルは移動されていて、場所は、ファイルはに移動されている。
したがって、この例では、2つの引数を持つコマンドがあります。
それでは、これらのコマンドライン引数を利用するために私達のCプログラムを言うのですか？
>> まあ、それは、我々はすべてのCプログラムで使用するメインは、秘密を持っていることが判明した。
argcとargv：メインは2つのパラメータを受け取ります。
のは、これらの用語の上に行こう。
>> 引数countの略最初のパラメータは、argc、
整数のデータ型を持っています。
argcパラメータは、コマンドを含む引数の数が含まれています。
私たちの移動コマンドでは、我々は2つ​​の引数だけが表示されているものの、
のargcの値は3になります。
引数ベクトルを表し番目のパラメータは、argv、
文字列を指すcharポインタの配列です。
>> これは、argvの各要素は、ゼロから出発することを意味します
コマンドと引数を含む。
私は、argvゼロとして参照することになります例えば、argv [0]は、
常に実行されるコマンドが含まれています -
この場合は、mv。
argvは[1] file.txtは最初の引数を、含まれています
とargv [2]は2番目の引数が含まれますが、〜/ CS50 /。
argvの最後の引数は、常にnullになります。
それでは、これらのコマンドライン引数を実装してみましょう。
前の練習では、メインのパラメータとしては、何もないことを意味し、voidを置いた。
しかし、私たちは、コマンドライン引数を使用できるようにするためには、
我々は、メインのint argcのボイドと場所の内部を削除する必要がchar *型のargv []。
今、あなたの引数であるARGVから要素全体をアクセスするときは、
あなたは、単にこのような配列を介して、ループの反復処理、またはすることができます。
だから、メインのボディの内側に、我々は先に行くと、forループを入力しようとしている：
するfor（int i = 0;のi <argcは、私+ +）。
>> 我々は唯一のコードの1行を実行しているので、我々はここに中括弧を必要としない
このループの本体内。
我々は、先に行くと、一回タブをヒットします
その後、printf関数の型（ "argvは[％d]で、整数値を表すために、
改行文字を文字列は、％sです。
その後、我々はiはループの現在の反復のためにprintfを提供
とargv [i]は、現在のコマンドライン引数の文字列表現について。
我々は2つ​​の引数を指定して実行すると、我々は、端末に表示されている引数が表示されます。
以前我々は、argvはcharのポインタの配列を保持していたと述べた。
>> これが事実である場合だから、どのように我々は、各引数の個々の文字にアクセスするのですか？
例えば、私が最初の引数内の特定の文字を探したいと思った場合はどうなるでしょうか？
よく、答えは、我々は、ネストされたループを適用する必要があるということです
それは、引数の文字列内の各要素を反復処理します。
これは、あなたがそれを行う方法です。
>> まず、example2.cはのコピーを作成するつもりです。
その後、最初のforループの内側、
我々は、forループの追加を追加するつもりです。
そうするfor（int j = 0であり、n = strlen関数（ARGV [i]）と、
その後、私たちの現在の引数の長さを与える、
あり、j <nであり、j + +）
私たちは、それぞれの文字の位置を印刷しようとしている
printfを使って、現在の引数の内側。
だから、のprintf（ "argvは[％d]で、現在の引数のインデックスを表すために、
次に、[％d]をもう一度、現在の引数の現在の文字を表現するために、
次のとおりです。％cは、引数内の現在の文字のために。
最後に、我々は、外側のループのインデックスでprintfを提供し、私は、
その後、内側のループのインデックス。
>> とprintfに私たちの最後の引数が渡される引数から実際の文字で
コマンドラインで。
さて、私は、文字列の長さを取得するために、文字列関数strlenを使用しているので、
私はまた私達の含みの先頭にstring.hでライブラリを追加する必要があります。
だから、それを行うために、我々は上がるだろう、とだけstdio.hの下で、私たちはやろうとしている
＃に含まれています。
>> それでは、コンパイルして実行し、それを実引数を与えることができるようになります。
>> 我々が見ることができるようにと、、我々は現在、引数内の個々のchar型の正確な位置を持っています。
だから、それはそれだ。私はクリストファー·バーソロミューだが、これはCS50です。
[CS50.TV]