1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [コマンドライン引数] 2 00:00:02,000 --> 00:00:04,000 [クリストファー·バーソロミュー - ハーバード大学] 3 00:00:04,000 --> 00:00:07,000 [これはCS50です - CS50.TV] 4 00:00:07,000 --> 00:00:11,000 プログラムのための便利な機能は、ユーザー入力を受け入れることです。 5 00:00:11,000 --> 00:00:15,000 これまでのところ、我々は、CS50ライブラリ内の一部の機能を探求してきた 6 00:00:15,000 --> 00:00:18,000 など、ユーザー入力を受け付けるようにする "とは、文字列を取得する" 7 00:00:18,000 --> 00:00:23,000 アプリケーションが起動している状態でこれは文字列のために、ユーザーに入力を求めます。 8 00:00:23,000 --> 00:00:28,000 >> しかし、あなたのプログラム入力を提供したい場合があります 9 00:00:28,000 --> 00:00:30,000 それが実際に実行される前に。 10 00:00:30,000 --> 00:00:34,000 このように、あなたはあなたのユーザーから追加情報を求める必要がない 11 00:00:34,000 --> 00:00:38,000 単純なタスクを実行中。 12 00:00:38,000 --> 00:00:42,000 たとえば、mvを取るか、またはUNIXのコマンドを移動します。 13 00:00:42,000 --> 00:00:49,000 このコマンドは、ユーザがある場所から別の場所にファイルを移動することができます。 14 00:00:49,000 --> 00:00:55,000 マニュアルページによると、mvは、2つのコマンドライン引数を受け付けます。 15 00:00:55,000 --> 00:01:00,000 そのファイルは移動されていて、場所は、ファイルはに移動されている。 16 00:01:00,000 --> 00:01:06,000 したがって、この例では、2つの引数を持つコマンドがあります。 17 00:01:06,000 --> 00:01:14,000 それでは、これらのコマンドライン引数を利用するために私達のCプログラムを言うのですか? 18 00:01:14,000 --> 00:01:20,000 >> まあ、それは、我々はすべてのCプログラムで使用するメインは、秘密を持っていることが判明した。 19 00:01:20,000 --> 00:01:26,000 argcとargv:メインは2つのパラメータを受け取ります。 20 00:01:26,000 --> 00:01:28,000 のは、これらの用語の上に行こう。 21 00:01:28,000 --> 00:01:33,000 >> 引数countの略最初のパラメータは、argc、 22 00:01:33,000 --> 00:01:36,000 整数のデータ型を持っています。 23 00:01:36,000 --> 00:01:42,000 argcパラメータは、コマンドを含む引数の数が含まれています。 24 00:01:42,000 --> 00:01:47,000 私たちの移動コマンドでは、我々は2つ​​の引数だけが表示されているものの、 25 00:01:47,000 --> 00:01:50,000 のargcの値は3になります。 26 00:01:50,000 --> 00:01:56,000 引数ベクトルを表し番目のパラメータは、argv、 27 00:01:56,000 --> 00:02:01,000 文字列を指すcharポインタの配列です。 28 00:02:01,000 --> 00:02:06,000 >> これは、argvの各要素は、ゼロから出発することを意味します 29 00:02:06,000 --> 00:02:09,000 コマンドと引数を含む。 30 00:02:09,000 --> 00:02:16,000 私は、argvゼロとして参照することになります例えば、argv [0]は、 31 00:02:16,000 --> 00:02:20,000 常に実行されるコマンドが含まれています - 32 00:02:20,000 --> 00:02:22,000 この場合は、mv。 33 00:02:22,000 --> 00:02:28,000 argvは[1] file.txtは最初の引数を、含まれています 34 00:02:28,000 --> 00:02:37,000 とargv [2]は2番目の引数が含まれますが、〜/ CS50 /。 35 00:02:37,000 --> 00:02:42,000 argvの最後の引数は、常にnullになります。 36 00:02:42,000 --> 00:02:46,000 それでは、これらのコマンドライン引数を実装してみましょう。 37 00:02:46,000 --> 00:02:53,000 前の練習では、メインのパラメータとしては、何もないことを意味し、voidを置いた。 38 00:02:53,000 --> 00:02:57,000 しかし、私たちは、コマンドライン引数を使用できるようにするためには、 39 00:02:57,000 --> 00:03:12,000 我々は、メインのint argcのボイドと場所の内部を削除する必要がchar *型のargv []。 40 00:03:12,000 --> 00:03:17,000 今、あなたの引数であるARGVから要素全体をアクセスするときは、 41 00:03:17,000 --> 00:03:21,000 あなたは、単にこのような配列を介して、ループの反復処理、またはすることができます。 42 00:03:21,000 --> 00:03:27,000 だから、メインのボディの内側に、我々は先に行くと、forループを入力しようとしている: 43 00:03:27,000 --> 00:03:37,000 するfor(int i = 0;のi 00:03:41,000 >> 我々は唯一のコードの1行を実行しているので、我々はここに中括弧を必要としない 45 00:03:41,000 --> 00:03:44,000 このループの本体内。 46 00:03:44,000 --> 00:03:47,000 我々は、先に行くと、一回タブをヒットします 47 00:03:47,000 --> 00:03:57,000 その後、printf関数の型( "argvは[%d]で、整数値を表すために、 48 00:03:57,000 --> 00:04:06,000 改行文字を文字列は、%sです。 49 00:04:06,000 --> 00:04:12,000 その後、我々はiはループの現在の反復のためにprintfを提供 50 00:04:12,000 --> 00:04:18,000 とargv [i]は、現在のコマンドライン引数の文字列表現について。 51 00:04:18,000 --> 00:04:25,000 我々は2つ​​の引数を指定して実行すると、我々は、端末に表示されている引数が表示されます。 52 00:04:34,000 --> 00:04:38,000 以前我々は、argvはcharのポインタの配列を保持していたと述べた。 53 00:04:38,000 --> 00:04:45,000 >> これが事実である場合だから、どのように我々は、各引数の個々の文字にアクセスするのですか? 54 00:04:45,000 --> 00:04:51,000 例えば、私が最初の引数内の特定の文字を探したいと思った場合はどうなるでしょうか? 55 00:04:51,000 --> 00:04:55,000 よく、答えは、我々は、ネストされたループを適用する必要があるということです 56 00:04:55,000 --> 00:04:59,000 それは、引数の文字列内の各要素を反復処理します。 57 00:04:59,000 --> 00:05:02,000 これは、あなたがそれを行う方法です。 58 00:05:02,000 --> 00:05:10,000 >> まず、example2.cはのコピーを作成するつもりです。 59 00:05:10,000 --> 00:05:13,000 その後、最初のforループの内側、 60 00:05:13,000 --> 00:05:15,000 我々は、forループの追加を追加するつもりです。 61 00:05:15,000 --> 00:05:28,000 そうするfor(int j = 0であり、n = strlen関数(ARGV [i])と、 62 00:05:28,000 --> 00:05:32,000 その後、私たちの現在の引数の長さを与える、 63 00:05:32,000 --> 00:05:39,000 あり、j 00:05:43,000 私たちは、それぞれの文字の位置を印刷しようとしている 65 00:05:43,000 --> 00:05:47,000 printfを使って、現在の引数の内側。 66 00:05:47,000 --> 00:05:57,000 だから、のprintf( "argvは[%d]で、現在の引数のインデックスを表すために、 67 00:05:57,000 --> 00:06:05,000 次に、[%d]をもう一度、現在の引数の現在の文字を表現するために、 68 00:06:05,000 --> 00:06:13,000 次のとおりです。%cは、引数内の現在の文字のために。 69 00:06:13,000 --> 00:06:20,000 最後に、我々は、外側のループのインデックスでprintfを提供し、私は、 70 00:06:20,000 --> 00:06:22,000 その後、内側のループのインデックス。 71 00:06:22,000 --> 00:06:28,000 >> とprintfに私たちの最後の引数が渡される引数から実際の文字で 72 00:06:28,000 --> 00:06:31,000 コマンドラインで。 73 00:06:31,000 --> 00:06:37,000 さて、私は、文字列の長さを取得するために、文字列関数strlenを使用しているので、 74 00:06:37,000 --> 00:06:43,000 私はまた私達の含みの先頭にstring.hでライブラリを追加する必要があります。 75 00:06:43,000 --> 00:06:50,000 だから、それを行うために、我々は上がるだろう、とだけstdio.hの下で、私たちはやろうとしている 76 00:06:50,000 --> 00:06:57,000 #に含まれています。 77 00:06:57,000 --> 00:07:02,000 >> それでは、コンパイルして実行し、それを実引数を与えることができるようになります。 78 00:07:09,000 --> 00:07:18,000 >> 我々が見ることができるようにと、、我々は現在、引数内の個々のchar型の正確な位置を持っています。 79 00:07:18,000 --> 00:07:23,000 だから、それはそれだ。私はクリストファー·バーソロミューだが、これはCS50です。 80 00:07:23,000 --> 00:07:26,000 [CS50.TV]