1 00:00:00,000 --> 00:00:02,480 >> [MUSIC nagpe-play] 2 00:00:02,480 --> 00:00:06,460 3 00:00:06,460 --> 00:00:09,350 >> DOUG LLOYD: Lahat ng karapatan, kaya sabihin makipag-usap tungkol sa mga argumento command-line. 4 00:00:09,350 --> 00:00:11,800 Kaya, sa ngayon sa kurso pretty magkano ang lahat ng iyong mga programa 5 00:00:11,800 --> 00:00:16,360 ay malamang na nagsimula tulad this-- int pangunahing walang bisa. 6 00:00:16,360 --> 00:00:18,310 Aming na-kolekta input ng gumagamit kung kailangan namin ito 7 00:00:18,310 --> 00:00:21,080 sa aming mga programa, tulad ng mga Program Mario, halimbawa, 8 00:00:21,080 --> 00:00:22,990 sa pamamagitan ng in-program senyas. 9 00:00:22,990 --> 00:00:25,190 Hindi namin kailangan upang baguhin ang deklarasyon ng main, 10 00:00:25,190 --> 00:00:30,684 dahil sa halip sa loob ng main namin sabihin lang, maaari kang tumawag ito upang makakuha ng int. 11 00:00:30,684 --> 00:00:32,350 Paano malaki ang gusto ninyong gawin ang mga pyramid na? 12 00:00:32,350 --> 00:00:34,455 O maaari kang tumawag ito upang makakuha ng float kung magkano ang baguhin 13 00:00:34,455 --> 00:00:36,400 dapat na output ko sa user? 14 00:00:36,400 --> 00:00:38,630 >> May isa pang paraan bagaman, at kung gusto namin ang aming mga gumagamit 15 00:00:38,630 --> 00:00:40,580 na maaaring magbigay sa data sa aming programa 16 00:00:40,580 --> 00:00:43,320 sa runtime sa halip ng habang ang program ay tumatakbo, 17 00:00:43,320 --> 00:00:45,910 isang banayad na pagkakaiba ngunit minsan isang lubhang kapaki-pakinabang sa isa, 18 00:00:45,910 --> 00:00:48,120 kailangan namin ng isang bagong form ng deklarasyon main. 19 00:00:48,120 --> 00:00:53,320 Hindi namin maaaring gamitin int pangunahing walang bisa kung gusto naming mangolekta ng iba pang mga data sa command-line 20 00:00:53,320 --> 00:00:57,540 kapag naubos na ang gumagamit sa programa, samakatuwid command-line argumento. 21 00:00:57,540 --> 00:00:59,810 >> Upang mangolekta ng mga command-line argumento mula sa gumagamit, 22 00:00:59,810 --> 00:01:03,140 baguhin ang iyong deklarasyon ng pangunahing upang magmukhang this-- int 23 00:01:03,140 --> 00:01:10,450 main, bukas paren, int argc, kuwit, string argv, square bracket, 24 00:01:10,450 --> 00:01:12,670 at pagkatapos ay buksan kulot suhay. 25 00:01:12,670 --> 00:01:14,415 Kaya kung ano ang ibig sabihin na mayroon? 26 00:01:14,415 --> 00:01:19,410 Well, kami ay pagpasa sa dalawang mga parameter, o mga argument, o input sa main. 27 00:01:19,410 --> 00:01:23,800 One, na isang integer na tinatawag na argc, at ang iba pang ay kung ano? 28 00:01:23,800 --> 00:01:26,430 29 00:01:26,430 --> 00:01:29,640 Ito ay isang hanay ng mga string, i-right? 30 00:01:29,640 --> 00:01:31,140 Nakita namin na notation square bracket. 31 00:01:31,140 --> 00:01:32,181 Ito ay isang hanay ng mga string. 32 00:01:32,181 --> 00:01:35,110 Ito ay hindi isang indibidwal na string, ito ay isang array ng mga string. 33 00:01:35,110 --> 00:01:39,640 At ang mga ito ng dalawang argumento, argc at argv, daan sa iyo upang malaman kung ano ang data sa user 34 00:01:39,640 --> 00:01:42,912 ay nagbigay sa command-line at kung gaano karaming mga bagay na kanilang 35 00:01:42,912 --> 00:01:44,120 ibinigay sa command-line. 36 00:01:44,120 --> 00:01:46,570 Medyo kapaki-pakinabang na mga bagay upang gumana sa. 37 00:01:46,570 --> 00:01:50,310 >> Argc ibig sabihin para sa count argument, at dapat mong malaman, sa daan, 38 00:01:50,310 --> 00:01:52,600 na maaari mong tawagan argc kahit anong gusto mo dito. 39 00:01:52,600 --> 00:01:54,710 Maaari kang tumawag sa argv anuman na iyong nais. 40 00:01:54,710 --> 00:01:58,740 Ang mga ito ay lamang ng maginoo mga pangalan na ginagamit namin para count them-- argument, 41 00:01:58,740 --> 00:02:00,907 at dahil kakailanganin namin makita sa isang segundo, argument vector, argv. 42 00:02:00,907 --> 00:02:03,698 Ngunit hindi mo na kailangang tumawag sa kanila argc at argv kung hindi mo nais na, 43 00:02:03,698 --> 00:02:05,570 ngunit conventionally, na kung ano ang ginagawa namin. 44 00:02:05,570 --> 00:02:07,500 >> Kaya pa rin, argc, ang bilang argument. 45 00:02:07,500 --> 00:02:11,569 Ito ay isang integer-type variable at iba, tulad ng maaari mong asahan, kung kami ay may dalawang mga bagay-bagay 46 00:02:11,569 --> 00:02:13,860 na namin ang pagpunta sa maging sa paghahanap kung ano ang mga ito ay nag-type 47 00:02:13,860 --> 00:02:16,070 at kung magkano ang mga bagay-bagay sa nag-type sa paggamit, argc ay 48 00:02:16,070 --> 00:02:18,559 pagpunta sa sabihin sa amin kung magkano bagay-bagay ang user na nai-type. 49 00:02:18,559 --> 00:02:20,850 Kaya ito ay nagbibigay sa iyo ng isang bilang ng mga command-line argumento user 50 00:02:20,850 --> 00:02:22,470 type kapag ang programa ay pinaandar. 51 00:02:22,470 --> 00:02:25,780 Kaya kung ang iyong programa ay tumakbo dot slash sakim, 52 00:02:25,780 --> 00:02:28,670 at sa loob ng iyong matakaw programa ang iyong pangunahing pag-andar 53 00:02:28,670 --> 00:02:34,800 Wala ang deklarasyon int pangunahing int argc, string argv square bracket, at pagkatapos ay 54 00:02:34,800 --> 00:02:37,950 argc sa kasong iyon ay isa. 55 00:02:37,950 --> 00:02:40,200 Ngayon pansinin namin na hindi namin bilangin kung gaano karaming mga bagay-bagay 56 00:02:40,200 --> 00:02:42,590 nai-type ng gumagamit matapos ang pangalan ng programa. 57 00:02:42,590 --> 00:02:46,710 Ang pangalan mismo program binibilang bilang argument command-line. 58 00:02:46,710 --> 00:02:51,770 >> Kaya dot slash sakim, sa ganitong kaso, argc ay isa. 59 00:02:51,770 --> 00:02:57,910 Kung ang user ay nag-type slash matakaw 1024 CS50 sa command-line, argc sa kasong iyon 60 00:02:57,910 --> 00:02:59,520 magiging tatlo. 61 00:02:59,520 --> 00:03:03,720 At nalalaman natin na ito dahil ang mga paraan na ang mga dibisyon sa pagitan ng mga string 62 00:03:03,720 --> 00:03:06,030 ay nakita ay kung doon ay isang puwang, o ang isang tab, 63 00:03:06,030 --> 00:03:08,230 o isang bagay tulad na sa pagitan ng mga ito. 64 00:03:08,230 --> 00:03:13,860 Kaya ang anumang mga halaga ng puting espasyo, tinatawag na, pagitan ng mga halaga na nai-type sa command-line 65 00:03:13,860 --> 00:03:15,720 ay nagpapahiwatig kung gaano karaming mga may. 66 00:03:15,720 --> 00:03:24,040 Kaya dot slash matakaw space 1024 space CS50, argc, sa kasong iyon, ang tatlo. 67 00:03:24,040 --> 00:03:26,600 >> Argv ay ang argument vector. 68 00:03:26,600 --> 00:03:29,240 Vector, sa daan, ay lamang isa pang salita para sa isang array, 69 00:03:29,240 --> 00:03:31,510 at ito ay isang array na nag-iimbak ng mga string. 70 00:03:31,510 --> 00:03:35,540 One string sa bawat elemento, na kung saan ay sa mga string na ang gumagamit ay talagang 71 00:03:35,540 --> 00:03:39,230 nag-type sa command-line kapag ang programa ay naisakatuparan. 72 00:03:39,230 --> 00:03:40,990 Ngayon, tulad ng kaso sa anumang array, kung ikaw 73 00:03:40,990 --> 00:03:44,380 pagpapabalik mula sa aming mga talakayan ng array, ang unang elemento ng argv 74 00:03:44,380 --> 00:03:49,150 ay palaging pagpunta sa matagpuan sa argv square bracket zero. 75 00:03:49,150 --> 00:03:51,800 Iyan ang unang index ng argv array. 76 00:03:51,800 --> 00:03:55,720 Kaya na will-- at sa katunayan, na kalooban palaging magiging ang pangalan ng programa, 77 00:03:55,720 --> 00:03:59,730 ay laging matatagpuan sa argv square bracket zero. 78 00:03:59,730 --> 00:04:08,590 >> Ang huling elemento ng argv ay laging natagpuan sa argv square bracket argc minus isa. 79 00:04:08,590 --> 00:04:10,300 Nakikita mo ba kung bakit? 80 00:04:10,300 --> 00:04:14,180 Tandaan kung gaano karaming mga elemento umiiral sa array na ito. 81 00:04:14,180 --> 00:04:16,660 Well, alam namin na- ito ay argc bilang ng mga elemento. 82 00:04:16,660 --> 00:04:21,279 Kung nai-type ng gumagamit ang tatlong bagay na ito sa ang command-line, argc ay tatlo. 83 00:04:21,279 --> 00:04:27,070 Ngunit dahil sa c, kapag na namin ang pagtatrabaho may array, ang bawat elemento ng array, 84 00:04:27,070 --> 00:04:30,190 o sa halip ng mga indeks ng array, magsimula sa zero. 85 00:04:30,190 --> 00:04:34,000 Kung kami ay may tatlong mga sangkap sa ating array, kami ay may isang elemento sa argv zero, 86 00:04:34,000 --> 00:04:37,930 isang elemento sa argv isa, at isang elemento sa argv dalawa. 87 00:04:37,930 --> 00:04:41,700 Walang element sa argv tatlo, at isang hanay ng mga laki ng tatlo. 88 00:04:41,700 --> 00:04:43,990 Kaya na ang dahilan kung bakit ang huling elemento ng argv maaari lagi 89 00:04:43,990 --> 00:04:49,510 matagpuan sa argv square bracket argc minus isa. 90 00:04:49,510 --> 00:04:52,420 >> Kaya sabihin ipagpalagay sa executes user ang matakaw programa bilang follows-- 91 00:04:52,420 --> 00:04:57,970 kung nag-type sila sa command-line na tuldok slash matakaw space 1024 space CS50, 92 00:04:57,970 --> 00:05:00,720 at para sa anumang dahilan na namin naka handa ang aming matakaw program 93 00:05:00,720 --> 00:05:04,050 malaman at gumagana sa mga command-line argumento. 94 00:05:04,050 --> 00:05:07,030 Hindi namin ginawa dati kapag kami ay nagtrabaho sa mga ito para sa mga sakim na problema, 95 00:05:07,030 --> 00:05:09,660 ngunit sabihin natin ngayon na namin binago ito upang ang proseso ng ginagawa namin 96 00:05:09,660 --> 00:05:11,480 ang mga argumento command-line sa ilang paraan. 97 00:05:11,480 --> 00:05:15,720 Sa kasong ito, argv zero ay tuldok slash matakaw. 98 00:05:15,720 --> 00:05:17,042 Ano ang argv ng isa? 99 00:05:17,042 --> 00:05:19,030 Well, ito ay 1024, tama? 100 00:05:19,030 --> 00:05:22,620 Ito ay 1024, ngunit narito ang isang talagang mahalaga distinction-- 101 00:05:22,620 --> 00:05:26,410 naaalala mo ang uri ng data ng argv? 102 00:05:26,410 --> 00:05:31,020 >> Ito mga tindahan ng mga string, i-right? 103 00:05:31,020 --> 00:05:34,140 Ngunit mukhang 1024 ay isang integer value. 104 00:05:34,140 --> 00:05:36,530 Ito ay isang tunay na mahalaga pagkakaiba, at ito ay talagang 105 00:05:36,530 --> 00:05:40,200 pagpunta sa maging isang bagay na ikaw maaaring makaharap sa problema mamaya. 106 00:05:40,200 --> 00:05:43,770 Lahat ng bagay sa argv ay naka-imbak bilang isang string. 107 00:05:43,770 --> 00:05:48,775 Kaya contents argv isa ay ang string isa, zero, dalawa, apat, 108 00:05:48,775 --> 00:05:50,275 na binubuo ng mga apat na mga character. 109 00:05:50,275 --> 00:05:53,870 Ito ay bilang kung nag-type ang user isa, zero, dalawa, apat 110 00:05:53,870 --> 00:05:56,680 bilang mga indibidwal na mga titik o character. 111 00:05:56,680 --> 00:06:00,730 Ito ay hindi ang integer 1024, at upang hindi ka maaaring direktang 112 00:06:00,730 --> 00:06:11,580 gumagana sa mga ito sa pamamagitan ng pagsasabi int 1000, o sa halip int x ay katumbas ng argv isa minus 24. 113 00:06:11,580 --> 00:06:15,550 >> Intuitively, maaari mong isipin na bilang, OK, na rin ito ay 1024 minus 24, 114 00:06:15,550 --> 00:06:17,920 kaya x ay katumbas ng 1,000. 115 00:06:17,920 --> 00:06:22,020 Ngunit sa katunayan, hindi iyon ang kaso, dahil argv isa ay isang string. 116 00:06:22,020 --> 00:06:23,940 Ang string 1024. 117 00:06:23,940 --> 00:06:28,739 Ngayon ay mayroong ay isang function na ay maaaring maging ginagamit upang i-convert ng mga string na integer. 118 00:06:28,739 --> 00:06:30,780 Hindi ko sayangin ito para sa iyo ngayon, ngunit ako sigurado Zamyla 119 00:06:30,780 --> 00:06:34,380 ay magiging masaya na sabihin sa iyo ang tungkol dito sa ang walkthrough para sa isang problema sa hinaharap. 120 00:06:34,380 --> 00:06:36,390 Ngunit maaari mo ring mahanap problema like-- excuse 121 00:06:36,390 --> 00:06:39,921 sa akin, pag-andar na gagawin gawin ito sa reference 50, 122 00:06:39,921 --> 00:06:42,462 kung pumunta ka sa gabay na sanggunian maaari mong mahanap ang isang function na 123 00:06:42,462 --> 00:06:43,820 ay gumawa ng conversion na ito para sa iyo. 124 00:06:43,820 --> 00:06:45,980 Ngunit muli, sa walkthrough para sa isang problema na hinaharap, 125 00:06:45,980 --> 00:06:48,290 Zamyla ay magiging masaya na sabihin sa iyo kung ano ang function 126 00:06:48,290 --> 00:06:53,280 ito ay na-convert ang string 1024 sa integer 1024. 127 00:06:53,280 --> 00:06:54,560 >> Lahat ng karapatan, kaya lumipat sa. 128 00:06:54,560 --> 00:06:56,726 Sakop namin ang aming argv zero, na sakop namin argv isa. 129 00:06:56,726 --> 00:06:58,000 Ano ang sa argv dalawa? 130 00:06:58,000 --> 00:06:58,620 CS50. 131 00:06:58,620 --> 00:07:01,350 Ang isang iyon ay marahil medyo maliwanag. 132 00:07:01,350 --> 00:07:02,950 Ano ang sa argv tatlo? 133 00:07:02,950 --> 00:07:04,970 Well muli, kami ay hindi talaga alam, di ba? 134 00:07:04,970 --> 00:07:08,060 Kami ay may isang hanay ng mga laki ng tatlo, na kung paano maraming mga sangkap sa user 135 00:07:08,060 --> 00:07:11,610 nag-type sa command-line, kaya kung pumunta kami sa argv tatlo, 136 00:07:11,610 --> 00:07:14,660 ngayon kami ay overstepping ang mga hangganan ng aming array. 137 00:07:14,660 --> 00:07:18,570 Ang tagatala ay ipaalam sa amin gawin ito, walang intuitive problema sa ito, 138 00:07:18,570 --> 00:07:22,890 ngunit sa mga tuntunin ng tunay na kung ano ang nangyayari mangyari, hindi namin talaga alam. 139 00:07:22,890 --> 00:07:25,380 Ito ay depende sa kung ano ang na matatagpuan sa memorya kung saan 140 00:07:25,380 --> 00:07:28,060 argv tatlong ay inaasahan na maging. 141 00:07:28,060 --> 00:07:30,716 At kaya maaaring magtapos up namin pagkuha ng malayo pahirap libre. 142 00:07:30,716 --> 00:07:33,840 Mas malamang kaysa hindi, lalo na kapag ikaw ay nagtatrabaho sa argv bilang laban 143 00:07:33,840 --> 00:07:35,548 sa anumang ibang mga array na ang dahilan sa aming programa, 144 00:07:35,548 --> 00:07:38,660 marahil kami ay pagpunta sa magdusa ng segmentation fault. Kaya muli, 145 00:07:38,660 --> 00:07:42,756 ay siguraduhin na hindi lumalampas na sa hangganan ng iyong array, lalo argv, 146 00:07:42,756 --> 00:07:47,170 ibinigay nito mataas na antas ng kahalagahan sa iyong mga programa. 147 00:07:47,170 --> 00:07:48,100 >> Ako Doug Lloyd. 148 00:07:48,100 --> 00:07:50,170 Ito ay CS50. 149 00:07:50,170 --> 00:07:51,457