1 00:00:00,000 --> 00:00:00,487 2 00:00:00,487 --> 00:00:11,210 >> [Музыка гуляе] 3 00:00:11,210 --> 00:00:12,100 >> ROB BODEN: Добра. 4 00:00:12,100 --> 00:00:15,620 Так, першае, што па-першае, відэа ад знаёмага твару. 5 00:00:15,620 --> 00:00:22,080 6 00:00:22,080 --> 00:00:22,560 >> [ВИДЕОВОСПРОИЗВЕДЕНИЕ] 7 00:00:22,560 --> 00:00:23,370 >> -Усё ў парадку. 8 00:00:23,370 --> 00:00:27,150 Гэта CS50, і гэта пачатак тыдні тры. 9 00:00:27,150 --> 00:00:29,980 Шкада, што я не мог быць там з вамі сёння, але дазвольце мне прадставіць 10 00:00:29,980 --> 00:00:32,880 CS50 уласнай Роб Боден. 11 00:00:32,880 --> 00:00:33,872 >> [КАНЕЦ ВИДЕОВОСПРОИЗВЕДЕНИЕ] 12 00:00:33,872 --> 00:00:39,340 >> [Апладысменты, пераходзячыя ў авацыю] 13 00:00:39,340 --> 00:00:41,277 >> ROB BODEN: фільмаграфія ў што відэа з'яўляецца фантастычным. 14 00:00:41,277 --> 00:00:47,280 15 00:00:47,280 --> 00:00:47,770 Добра. 16 00:00:47,770 --> 00:00:50,960 Такім чынам, спачатку, ёсць іншы абед. 17 00:00:50,960 --> 00:00:52,330 Гэта заўтра ў 1:15. 18 00:00:52,330 --> 00:00:54,480 Там няма ніякага абеду ў гэтую пятніцу. 19 00:00:54,480 --> 00:00:55,810 Менавіта з Quora. 20 00:00:55,810 --> 00:01:00,190 І Томі яшчэ не тут, але адзін з людзі там з'яўляецца былы кіраўнік CF, 21 00:01:00,190 --> 00:01:01,530 Томі McWilliam. 22 00:01:01,530 --> 00:01:02,730 Так што ён вясёлы хлопец. 23 00:01:02,730 --> 00:01:04,819 Вы павінны прыйсці. 24 00:01:04,819 --> 00:01:05,900 >> Добра. 25 00:01:05,900 --> 00:01:11,360 Так на мінулым тыдні, мы пачалі развальваецца аб тым, што радок на самай справе. 26 00:01:11,360 --> 00:01:14,830 Мы ведалі з самага пачатку, што гэта паслядоўнасць знакаў. 27 00:01:14,830 --> 00:01:18,130 Але на мінулым тыдні, мы пагрузіліся ў той факт, што тое, што на самой справе з'яўляецца паслядоўнасць 28 00:01:18,130 --> 00:01:22,110 персанажы, ну, у нас зараз ёсць масівы знакаў. 29 00:01:22,110 --> 00:01:26,450 І мы ведаем, што гэта радок, гэта масіў сімвалаў, у самым канцы, 30 00:01:26,450 --> 00:01:30,920 у нас ёсць гэты спецыяльны нулявы байт, гэта зваротны слеш 0, што паказвае на канец 31 00:01:30,920 --> 00:01:32,230 радок. 32 00:01:32,230 --> 00:01:36,970 >> І таму радок ўяўляе сабой масіў персанажы, але мы можам мець больш 33 00:01:36,970 --> 00:01:39,530 проста масіў сімвалаў, мы можам мець масіў любой 34 00:01:39,530 --> 00:01:40,890 тып рэчы мы хочам. 35 00:01:40,890 --> 00:01:51,570 Так што, калі вы памятаеце з мінулага тыдня, Праграма стагоддзя, што Давід увёў 36 00:01:51,570 --> 00:01:53,560 вельмі хутка. 37 00:01:53,560 --> 00:01:57,010 Так першае, што мы збіраемся зрабіць, гэта спытаць карыстальніка для цэлага ліку, 38 00:01:57,010 --> 00:01:58,800 колькасць людзей у пакоі. 39 00:01:58,800 --> 00:02:01,260 Як толькі ў нас ёсць, што цэлае, мы аб'яўленні масіва. 40 00:02:01,260 --> 00:02:02,890 Звярніце ўвагу, гэты сінтаксіс кранштэйн. 41 00:02:02,890 --> 00:02:04,540 Вы збіраецеся, каб прывыкнуць да гэтага. 42 00:02:04,540 --> 00:02:09,430 >> Такім чынам, мы аб'яўленні масіва цэлых лікаў называецца ўзрост, і ёсць п 43 00:02:09,430 --> 00:02:12,080 цэлыя лікі у гэтым масіве. 44 00:02:12,080 --> 00:02:16,480 Так гэтая карціна прама тут, гэта 4 унутр я роўная 0, я менш п, я плюс 45 00:02:16,480 --> 00:02:20,580 плюс, што таксама збіраецца быць узорам што вы атрымаеце вельмі прывыклі. 46 00:02:20,580 --> 00:02:24,000 Таму што вельмі шмат, як вы заўсёды будзе перабору масіваў. 47 00:02:24,000 --> 00:02:26,330 Так што памятаеце, што п даўжыня нашага масіва. 48 00:02:26,330 --> 00:02:32,120 І вось, мы неаднаразова з просьбай для ўзросту чалавек, якога я ў пакоі. 49 00:02:32,120 --> 00:02:36,640 >> Пасля гэтага, мы ідзем ўніз, і па тых ці іншых адвольнае прычына, мы тады 50 00:02:36,640 --> 00:02:40,220 раздрукаваць колькі гадоў яны збіраюцца быць праз год. 51 00:02:40,220 --> 00:02:49,980 І выконвае гэтую праграму, давайце зрабіць узростаў, кропка касой узростаў. 52 00:02:49,980 --> 00:02:53,010 Так колькасць людзей у пакоі, скажам ёсць тры. 53 00:02:53,010 --> 00:02:59,880 І сказаць, першы чалавек, складае 13, Наступны складае 26, а апошні 30. 54 00:02:59,880 --> 00:03:05,080 Так то ён будзе перабіраць гэтых трох людзі, раздрукаваць 14, 27, і 31. 55 00:03:05,080 --> 00:03:16,060 >> Так што памятаеце, што, калі мы заяўляем, масіў памеру п, індэксы ў тым, што 56 00:03:16,060 --> 00:03:19,950 Масіў, масіў мае значэння і індэксы 0, 1, 2, на ўсім шляху 57 00:03:19,950 --> 00:03:21,680 да н мінус 1. 58 00:03:21,680 --> 00:03:26,255 Таму, калі мы сказалі, што было тры чалавекі ў пакоі, і мы ставім тут 59 00:03:26,255 --> 00:03:29,850 першая ітэрацыя праз гэта цыкл, я будзе 0. 60 00:03:29,850 --> 00:03:31,650 Так у індэксе 0. 61 00:03:31,650 --> 00:03:34,540 Мы прысвойваем першы З узростам, калі карыстальнік ўводзіць. 62 00:03:34,540 --> 00:03:38,870 Тады ў наступны, мы ўваходзім Другі н карыстальнік ўводзіць, а ў 63 00:03:38,870 --> 00:03:40,580 побач з двума, апошніх п. 64 00:03:40,580 --> 00:03:44,200 >> Так заўважыць, што масіў памеру тры не мае нічога 65 00:03:44,200 --> 00:03:46,040 ў індэксе тры. 66 00:03:46,040 --> 00:03:49,036 Гэта не ставіцца. 67 00:03:49,036 --> 00:03:50,250 Добра. 68 00:03:50,250 --> 00:03:55,136 Так, вяртаючыся тут. 69 00:03:55,136 --> 00:03:57,650 70 00:03:57,650 --> 00:04:01,590 Такім чынам, што мы мелі справу з масівамі, мы трохі знаёмыя. 71 00:04:01,590 --> 00:04:03,780 Цяпер мы збіраемся перайсці да каманды аргументы каманднага радка, якія будуць 72 00:04:03,780 --> 00:04:05,890 даволі стаўленне да гэтай праблемы набору. 73 00:04:05,890 --> 00:04:09,670 >> Так да гэтага часу, кожны раз, калі ў Вас ёсць абвясцілі аб сваёй галоўнай функцыі, мы 74 00:04:09,670 --> 00:04:11,230 сказаў тап_п несапраўднымі. 75 00:04:11,230 --> 00:04:14,070 Так несапраўднымі проста азначае, што мы не праходзячы любой 76 00:04:14,070 --> 00:04:16,440 Аргументы гэтай функцыі. 77 00:04:16,440 --> 00:04:19,190 Цяпер мы збіраемся, каб убачыць, што асноўныя можа заняць некалькі аргументаў. 78 00:04:19,190 --> 00:04:22,470 Тут мы называем іх унутр агдс і струнныя ARGV дужкі. 79 00:04:22,470 --> 00:04:26,930 Дужкі, у чарговы раз, што паказвае на што мы маем справу з масівамі. 80 00:04:26,930 --> 00:04:31,850 Дык вось, радок ARGV дужкі, мы справу з масівам радкоў. 81 00:04:31,850 --> 00:04:35,360 Так агдс, што адбываецца, каб паказаць, колькі аргументаў мы ў 82 00:04:35,360 --> 00:04:37,580 прайшоў у гэтую праграму. 83 00:04:37,580 --> 00:04:46,050 І бачыць, што гэта значыць, давайце закрыем гэты. 84 00:04:46,050 --> 00:04:46,490 >> ОК. 85 00:04:46,490 --> 00:04:50,790 Так да гэтага часу, мы запускаем кожны праграма, як кропкавых узростаў касой. 86 00:04:50,790 --> 00:04:55,250 Мы можам таксама, у камандным радку, міма перадаць аргументы такім чынам, тэрмін, каманда, 87 00:04:55,250 --> 00:04:56,550 аргументы каманднага радка. 88 00:04:56,550 --> 00:04:59,760 Такім чынам, першы аргумент, прывітанне свет. 89 00:04:59,760 --> 00:05:03,350 Дык вось, агдс будзе тры. 90 00:05:03,350 --> 00:05:07,720 Гэта кол-у аргументаў у камандным радку. 91 00:05:07,720 --> 00:05:12,840 ARGC заўсёды па крайняй меры 1, так як кропка скараціць ўзрост, сябе, лічыцца адным з 92 00:05:12,840 --> 00:05:14,490 аргументы каманднага радка. 93 00:05:14,490 --> 00:05:17,010 >> Тады прывітанне з'яўляецца першым. 94 00:05:17,010 --> 00:05:20,460 Калі кропка ўзрост слэш з'яўляецца нулявы, то Прывітанне з'яўляецца першым, і свет 95 00:05:20,460 --> 00:05:22,830 Другая радок аргумент каманднага. 96 00:05:22,830 --> 00:05:29,490 Так радок агду, мы збіраемся, каб убачыць, ўтрымлівае радкі, кропка слэш 97 00:05:29,490 --> 00:05:33,830 ўзрост, прывітанне, і свет. 98 00:05:33,830 --> 00:05:38,945 І, па запыце Давіда, мы збіраемся для прайгравання відэа, уяўляючы, што. 99 00:05:38,945 --> 00:05:42,486 100 00:05:42,486 --> 00:05:43,890 >> [ВИДЕОВОСПРОИЗВЕДЕНИЕ] 101 00:05:43,890 --> 00:05:46,240 >> ня-Да гэтага часу ў праграмах мы напісана, мы заяўляем 102 00:05:46,240 --> 00:05:48,500 Асноўным як тап_п несапраўднымі. 103 00:05:48,500 --> 00:05:51,170 І ўвесь гэты час, што пустата ёсць проста быў удакладніўшы, што 104 00:05:51,170 --> 00:05:54,430 Праграма не прымаць якія-небудзь аргументы каманднага радка. 105 00:05:54,430 --> 00:05:57,750 Іншымі словамі, калі карыстальнік запускае Праграма, ён або яна можа забяспечыць каманду 106 00:05:57,750 --> 00:06:01,710 аргументы каманднага радка, прапісаўшы дадатковыя словы або фразы пасля програмы 107 00:06:01,710 --> 00:06:03,000 назваць у камандным радку. 108 00:06:03,000 --> 00:06:06,550 >> Ну, калі вы хочаце, каб ваша праграма прымаць аргументы каманднага радка, адзін або 109 00:06:06,550 --> 00:06:10,540 больш такіх слоў, мы павінны замяніць анулявання з парай аргументаў. 110 00:06:10,540 --> 00:06:12,200 Так давайце зробім гэта. 111 00:06:12,200 --> 00:06:15,750 Уключыце CS50.h. 112 00:06:15,750 --> 00:06:19,360 Уключыце стандартны io.h. 113 00:06:19,360 --> 00:06:20,760 Int асноўнай. 114 00:06:20,760 --> 00:06:26,330 І цяпер, замест таго, пустата, я збіраюся пазначыць Int назвай агдс і 115 00:06:26,330 --> 00:06:28,780 масіў радкоў званых агду. 116 00:06:28,780 --> 00:06:31,820 Цяпер, агдс і агду з'яўляюцца проста канвенцый. 117 00:06:31,820 --> 00:06:34,000 >> Мы маглі б назваць гэтыя аргументы Найбольш ўсё, што мы хочам. 118 00:06:34,000 --> 00:06:37,630 Але важна тое, што агдс з'яўляецца унутр таму, па вызначэнні, гэта 119 00:06:37,630 --> 00:06:41,360 будзе ўтрымліваць колькасць аргументаў, колькасць слоў у цэлым, што 120 00:06:41,360 --> 00:06:43,380 карыстач увёў у яго ці яе радку. 121 00:06:43,380 --> 00:06:47,910 агду, тым часам, аргумент вектар, з'яўляецца збіраецца быць на самай справе масіў захоўвання 122 00:06:47,910 --> 00:06:52,020 усе словы пра тое, што карыстальнік мае набралі па яго ці яе радку. 123 00:06:52,020 --> 00:06:54,500 >> Пяройдзем зрабіць што-то зараз з адным або больш з гэтых 124 00:06:54,500 --> 00:06:55,660 аргументы каманднага радка. 125 00:06:55,660 --> 00:07:00,070 У прыватнасці, давайце ісці наперад і друк якія б ні былі слова карыстач уводзіць 126 00:07:00,070 --> 00:07:03,960 пасля назвы праграмы у камандным радку. 127 00:07:03,960 --> 00:07:04,730 Адкрыць кранштэйн. 128 00:07:04,730 --> 00:07:06,240 Зачыніць кранштэйн. 129 00:07:06,240 --> 00:07:10,510 Printf працэнтаў з зваротнай касой і коска. 130 00:07:10,510 --> 00:07:14,550 А цяпер я павінен сказаць Printf якое значэнне для падлучэння да гэтай запаўняльніка. 131 00:07:14,550 --> 00:07:18,600 Я хачу першае слова, якое карыстальнік павінен набралі пасля імя праграмы, 132 00:07:18,600 --> 00:07:23,130 і таму я збіраюся паказаць агду кранштэйны 1, недалёка 133 00:07:23,130 --> 00:07:24,830 дужка, кропка з коскі. 134 00:07:24,830 --> 00:07:27,290 >> Цяпер, чаму кранштэйны 1, а ня кранштэйны 0? 135 00:07:27,290 --> 00:07:30,990 Ну, аказваецца, аўтаматычна захоўваюцца у ARGV 0 будзе 136 00:07:30,990 --> 00:07:32,620 сапраўднае імя праграмы. 137 00:07:32,620 --> 00:07:36,180 Такім чынам, першае слова, якое карыстальнік ўводзіць пасля імя праграмы з'яўляецца, па 138 00:07:36,180 --> 00:07:38,990 Канвенцыя, будзе захоўваецца ў ARGV 1. 139 00:07:38,990 --> 00:07:42,380 Давайце зараз скампіляваць і запусціць гэтую праграму. 140 00:07:42,380 --> 00:07:47,780 >> Зрабіць ARGV 0, кропка слэш ARGV 0. 141 00:07:47,780 --> 00:07:50,520 А цяпер слова як прывітанне. 142 00:07:50,520 --> 00:07:51,670 Enter. 143 00:07:51,670 --> 00:07:53,520 І ў нас гэта ёсць, прывітанне. 144 00:07:53,520 --> 00:07:55,750 >> [КАНЕЦ ВИДЕОВОСПРОИЗВЕДЕНИЕ] 145 00:07:55,750 --> 00:07:57,000 >> ROB BODEN: Добра. 146 00:07:57,000 --> 00:07:59,380 147 00:07:59,380 --> 00:08:01,230 Зачыніць гэта. 148 00:08:01,230 --> 00:08:16,730 Так зірнуць на гэтую праграму, што мы толькі што прадставіла нам, ну проста 149 00:08:16,730 --> 00:08:24,710 паказаць, калі мы друкуем агду 0, зрабіць, цяпер што гэта такое, агду 0, кропка слэш агду 0. 150 00:08:24,710 --> 00:08:30,440 Так што, як чакаецца, гэта выснова на друк Назва праграмы, так як агду 0 151 00:08:30,440 --> 00:08:32,970 заўсёды будзе Назва праграмы. 152 00:08:32,970 --> 00:08:35,640 Але давайце зробім нешта крыху больш цікавым. 153 00:08:35,640 --> 00:08:42,080 >> Такім чынам, у мностве праблем, вы будзеце пазнаёміўся з гэтай функцыяй, atoi. 154 00:08:42,080 --> 00:08:44,440 Дык што ж нам выкарыстоўваць atoi для? 155 00:08:44,440 --> 00:08:48,550 Гэта збіраецца пераўтварыць радок у цэлы лік. 156 00:08:48,550 --> 00:08:53,280 Так што калі я перадаць радок, адзін, два, тры, каб atoi, які будзе канвертаваць, што 157 00:08:53,280 --> 00:08:56,910 да цэлага, адзін, два, тры. 158 00:08:56,910 --> 00:09:01,480 Так што мы збіраемся пераўтварыць першы Аргумент каманднага радка ў цэлы лік, 159 00:09:01,480 --> 00:09:05,690 а затым проста раздрукаваць, што цэлы лік. 160 00:09:05,690 --> 00:09:09,680 >> Так у асноўным, мы накшталт паўторнай рэалізацыі GetInt, проста 161 00:09:09,680 --> 00:09:12,350 цэлае ўводзіцца па камандзе лінія, а не ў праграме 162 00:09:12,350 --> 00:09:14,560 у інтэрактыўным рэжыме. 163 00:09:14,560 --> 00:09:23,170 Такім чынам, што робіць ARGV 0, давайце зробім гэта тут, і зачыніце гэта. 164 00:09:23,170 --> 00:09:27,670 Так працуе ARGV 0, і давайце увядзіце цэлы лік, адзін два тры чатыры адзін два. 165 00:09:27,670 --> 00:09:30,840 Дык гэта будзе вывесці цэлае, адзін два тры чатыры адзін два. 166 00:09:30,840 --> 00:09:35,500 Ёсць некаторыя тонкасці, каб atoi, што гэта будзе перастаць турбавацца ні пра што 167 00:09:35,500 --> 00:09:39,040 за сапраўднага лікавага сімвала, але гэта не мае значэння. 168 00:09:39,040 --> 00:09:42,870 >> Так што ж вы думаеце, што адбываецца калі я зраблю гэта? 169 00:09:42,870 --> 00:09:45,520 170 00:09:45,520 --> 00:09:47,050 Сегментацыя віна. 171 00:09:47,050 --> 00:09:50,410 Дык чаму ж? 172 00:09:50,410 --> 00:09:56,060 Калі вы паглядзіце на нашу праграму, мы пераўтварэнні ARGV 1, першы аргумент 173 00:09:56,060 --> 00:09:59,610 пасля назвы праграмы, у цэлы лік. 174 00:09:59,610 --> 00:10:03,350 Але няма аргумент, перадаваны пасля назвы праграмы. 175 00:10:03,350 --> 00:10:08,060 Дык вось, мы бачым, што гэта багі Праграма, паколькі, калі мы паспрабуем запусціць яго 176 00:10:08,060 --> 00:10:10,530 без якіх-небудзь аргументаў, ён проста будзе крах. 177 00:10:10,530 --> 00:10:16,950 >> Так яшчэ адна распаўсюджаная карціна, то вы ўбачыце, будзе нешта накшталт, калі агдс менш 178 00:10:16,950 --> 00:10:21,100 не два, з указаннем, што не было па меншай меры, імя праграмы і 179 00:10:21,100 --> 00:10:29,100 Першы аргумент, то мы зробім нешта як Е, не дастаткова 180 00:10:29,100 --> 00:10:31,190 аргументы каманднага радка. 181 00:10:31,190 --> 00:10:33,170 Гэта, верагодна, не добры для друку, гэта, напэўна, нешта, як 182 00:10:33,170 --> 00:10:35,440 вы павінны ўвесці цэлы лік у камандным радку. 183 00:10:35,440 --> 00:10:37,450 Я проста скончыць яго там. 184 00:10:37,450 --> 00:10:39,600 А потым вярнуць 1. 185 00:10:39,600 --> 00:10:44,740 Так што памятаеце, што ў канцы нашай Праграма, калі мы вернемся 0, такога роду 186 00:10:44,740 --> 00:10:47,060 паказвае на паспяховае завяршэнне. 187 00:10:47,060 --> 00:10:50,940 А галоўнае аўтаматычна вяртае 0, калі вы не робіце. 188 00:10:50,940 --> 00:10:55,800 >> Дык вось, мы пераналадкі 1, каб паказаць што гэта не поспех. 189 00:10:55,800 --> 00:11:01,000 І вы можаце вярнуцца, што вы хочаце, проста, 0 паказвае на паспяховае завяршэнне, і 190 00:11:01,000 --> 00:11:03,390 што-небудзь яшчэ паказвае на памылку. 191 00:11:03,390 --> 00:11:04,855 Так што давайце запусціць гэтую версію рэчаў. 192 00:11:04,855 --> 00:11:12,880 193 00:11:12,880 --> 00:11:16,600 Так што цяпер, калі мы не увядзіце камандную радок аргумент, гэта будзе правільна сказаць 194 00:11:16,600 --> 00:11:18,290 нам, не дастаткова каманднага радка. 195 00:11:18,290 --> 00:11:20,610 Ня скончыць фразу. 196 00:11:20,610 --> 00:11:24,950 Інакш, калі мы на самай справе перадаць яму адзін, ён можа завяршыць праграму. 197 00:11:24,950 --> 00:11:27,920 Так што гэта, як вы будзеце выкарыстоўваць ARGC ў Для таго каб праверыць колькасць 198 00:11:27,920 --> 00:11:30,630 аргументы каманднага радка, што на самой справе прайшло. 199 00:11:30,630 --> 00:11:39,360 >> Так давайце зробім гэтую праграму трохі больш складана, і паглядзець на секунду 200 00:11:39,360 --> 00:11:42,180 ітэрацыя рэчаў. 201 00:11:42,180 --> 00:11:46,310 Так што цяпер, мы не проста друк Першы радок аргумент каманднага. 202 00:11:46,310 --> 00:11:51,210 Тут мы ітэрацыі ад дзесятковага я роўных 0, я менш агдс, я плюс 203 00:11:51,210 --> 00:11:55,280 плюс, і друк агду, індэкс г. 204 00:11:55,280 --> 00:11:59,300 Так гэтая карціна, зноў жа, гэта тое ж самае карціна, як і раней, за выключэннем таго, замест таго, каб 205 00:11:59,300 --> 00:12:02,600 выкліку зменную п, мы выкарыстоўваем ARGC. 206 00:12:02,600 --> 00:12:09,520 >> Так што гэта перабор кожнага індэкса ў масіве, і друк кожнага 207 00:12:09,520 --> 00:12:11,910 элемент у гэтым масіве. 208 00:12:11,910 --> 00:12:20,300 І вось, калі мы запусцім гэтую праграму, добра, Я не ўвесці любы каманднага радка 209 00:12:20,300 --> 00:12:22,540 аргументы, так што проста друкуе назва праграмы. 210 00:12:22,540 --> 00:12:26,053 Калі я ўваходжу кучу рэчаў, яно будзе раздрукаваць адзін, кожны на асобнай радку. 211 00:12:26,053 --> 00:12:31,213 212 00:12:31,213 --> 00:12:32,210 >> ОК. 213 00:12:32,210 --> 00:12:34,770 Такім чынам, давайце яшчэ адзін крок. 214 00:12:34,770 --> 00:12:38,890 І замест таго, каб друкаваць кожны аргумент на асобным радку, давайце друкаваць кожны 215 00:12:38,890 --> 00:12:42,590 характар ​​кожнага аргументу на асобнай радку. 216 00:12:42,590 --> 00:12:46,700 Таму памятайце, што агду з'яўляецца масіў радкоў. 217 00:12:46,700 --> 00:12:50,960 Так што гэта радок, але масіў сымбаляў? 218 00:12:50,960 --> 00:12:57,140 Дык гэта значыць, што агду сапраўды Масіў масіў знакаў. 219 00:12:57,140 --> 00:13:04,920 Так, скарыстаўшыся, што, давайце звяртаць на яго ўвагі. 220 00:13:04,920 --> 00:13:08,190 Давайце проста разгледзім радкі ARGV 0. 221 00:13:08,190 --> 00:13:14,170 >> Так што калі мы хочам прынесці кожны знак агду 0 на асобнай радку, то я хачу 222 00:13:14,170 --> 00:13:19,500 зрабіць шаблон мы прывыклі, я гэта менш, чым даўжыня масіва, 223 00:13:19,500 --> 00:13:23,990 якія тут, у STRLEN з, гэта не тое, што я хачу зрабіць, радок 224 00:13:23,990 --> 00:13:26,450 з роўна агду 0. 225 00:13:26,450 --> 00:13:30,390 Так што я менш даўжыні нашага масіў, які ў дадзеным выпадку ўяўляе сабой масіў 226 00:13:30,390 --> 00:13:34,410 знакаў, я плюс плюс. 227 00:13:34,410 --> 00:13:41,040 І так, як мы бачылі на мінулым тыдні, ён ідэальна падыходзіць калі мы будзем рухацца, што STRLEN межамі 228 00:13:41,040 --> 00:13:45,210 стану, так як у я будзе дадаваць STRLEN з з кожны раз мы ідзем 229 00:13:45,210 --> 00:13:47,720 праз пятлю, і гэта не будзе змяняцца. 230 00:13:47,720 --> 00:13:50,230 Так мы усталюем яго роўным п над тут. 231 00:13:50,230 --> 00:13:54,260 232 00:13:54,260 --> 00:13:55,170 >> ОК. 233 00:13:55,170 --> 00:14:01,320 Так што цяпер, мы ітэрацыі кожны індэкс у масіве. 234 00:14:01,320 --> 00:14:05,630 Дык вось, калі мы хочам надрукаваць кожны характар ​​у гэтым масіве, працэнтаў з з'яўляецца 235 00:14:05,630 --> 00:14:06,880 сцяг мы хочам выкарыстоўваць для персанажаў. 236 00:14:06,880 --> 00:14:10,750 237 00:14:10,750 --> 00:14:19,770 А цяпер планка я будзе радок, індэкс сімвала я, так што, калі 238 00:14:19,770 --> 00:14:20,970 Радок былі прывітанне. 239 00:14:20,970 --> 00:14:27,530 Тады S 0 будзе H, S кранштэйны 1 будзе е і так далей. 240 00:14:27,530 --> 00:14:30,800 >> Так што цяпер мы хочам аб'яднаць гэтыя дзве рэчы. 241 00:14:30,800 --> 00:14:35,440 Мы хочам, каб надрукаваць кожны знак кожнага аргументу каманднага радка. 242 00:14:35,440 --> 00:14:38,950 Такім чынам, мы будзем мець укладзенымі цыклу. 243 00:14:38,950 --> 00:14:47,480 І звычайна, першы лічыльнік Я, на наступны будзе J, п 244 00:14:47,480 --> 00:14:54,450 будзе STRLEN з ARGV г, г менш п, я плюс плюс. 245 00:14:54,450 --> 00:14:59,150 246 00:14:59,150 --> 00:15:06,870 І цяпер замест друку агду I, так агду кранштэйны я збіраецца індэкса - 247 00:15:06,870 --> 00:15:14,280 што будзе г-я каманднага радка Аргумент, агду I, J збіраецца 248 00:15:14,280 --> 00:15:16,925 быць JTH характар г-я аргумент. 249 00:15:16,925 --> 00:15:20,580 250 00:15:20,580 --> 00:15:24,810 Я пазбавіцца ад гэтага тут зараз так як мы пакласці яго ў гэтым цыкле. 251 00:15:24,810 --> 00:15:33,900 Так эквівалентна роўных струны з агду я, а затым з кранштэйны J. 252 00:15:33,900 --> 00:15:36,980 >> Ну, мы не павінны абвясьціць гэтая пераменная с. 253 00:15:36,980 --> 00:15:44,530 Замест гэтага, мы проста сумясціць гэтыя два ў тое, што ў нас было, агду I, J. 254 00:15:44,530 --> 00:15:45,780 >> Выступоўца 1: [неразборліва]. 255 00:15:45,780 --> 00:15:48,850 256 00:15:48,850 --> 00:15:49,680 >> ROB BODEN: Добрая слова. 257 00:15:49,680 --> 00:15:52,936 Так што гэта не працуе. 258 00:15:52,936 --> 00:15:55,510 Калі я на самой справе запусціў яго, мы б гэта зразумелі. 259 00:15:55,510 --> 00:16:01,210 Так лічыльнік мяне хвалюе У дадзеным канкрэтным за 260 00:16:01,210 --> 00:16:05,410 цыкл у, итератор. 261 00:16:05,410 --> 00:16:08,560 Такім чынам, вы б сутыкнуцца з праблемамі, верагодна, бясконцы цыкл, калі мы 262 00:16:08,560 --> 00:16:09,540 не зафіксавана, што. 263 00:16:09,540 --> 00:16:12,220 Вось чаму мы таксама кажам аб адладцы сёння. 264 00:16:12,220 --> 00:16:13,120 >> ОК. 265 00:16:13,120 --> 00:16:15,240 Так што давайце запусціць гэтую праграму. 266 00:16:15,240 --> 00:16:21,200 І давайце на самай справе дадаць асобны Printf прама тут, што будзе проста раздрукаваць 267 00:16:21,200 --> 00:16:27,480 іншая лінія, так як гэта азначае, калі мы запусціць праграму, там будзе пуста 268 00:16:27,480 --> 00:16:31,830 лінія паміж кожным характарам кожны радок аргумент каманднага. 269 00:16:31,830 --> 00:16:33,448 Ну, мы ўбачым, што гэта значыць. 270 00:16:33,448 --> 00:16:37,310 271 00:16:37,310 --> 00:16:37,790 ААП. 272 00:16:37,790 --> 00:16:39,870 Ёсць некаторыя памылкі. 273 00:16:39,870 --> 00:16:42,860 Памылка няяўна абвясціўшы Бібліятэчная функцыя STRLEN. 274 00:16:42,860 --> 00:16:51,630 >> Так вяртаючыся ў нашу праграму, я забыўся хэш ўключаюць string.h. 275 00:16:51,630 --> 00:16:54,240 276 00:16:54,240 --> 00:16:57,730 Так string.h будзе Выява загалоўка, які аб'яўляе 277 00:16:57,730 --> 00:16:58,980 функцыя STRLEN. 278 00:16:58,980 --> 00:17:04,650 279 00:17:04,650 --> 00:17:06,060 Добра, ён кампілюе. 280 00:17:06,060 --> 00:17:09,109 Цяпер, давайце запусцім яго. 281 00:17:09,109 --> 00:17:10,930 Так менавіта гэта. 282 00:17:10,930 --> 00:17:17,790 Гэта збіраецца раздрукаваць нашы Імя праграмы, прывітанне свет. 283 00:17:17,790 --> 00:17:23,510 Гэта збіраецца друкаваць кожную рэч, кожны характар, у асобнай радку. 284 00:17:23,510 --> 00:17:24,540 ОК. 285 00:17:24,540 --> 00:17:30,625 >> Так што давайце на самай справе прыняць гэта яшчэ адзін крок наперад. 286 00:17:30,625 --> 00:17:34,050 287 00:17:34,050 --> 00:17:39,700 І замест таго каб выкарыстоўваць string.h, давайце думаць пра тое, як мы б рэалізаваць наша ўласнае 288 00:17:39,700 --> 00:17:41,420 STRLEN функцыя. 289 00:17:41,420 --> 00:17:45,600 Так што я буду неадкладна даць функцыя подпіс. 290 00:17:45,600 --> 00:17:52,900 Так што давайце называць у my_strlen, і гэта збіраецца ўзяць радок у якасці аргументу, 291 00:17:52,900 --> 00:17:57,220 і мы чакаем, каб вярнуцца Даўжыня гэтага радка. 292 00:17:57,220 --> 00:18:03,430 Так, дзе гэты хлопец? 293 00:18:03,430 --> 00:18:04,990 Так. 294 00:18:04,990 --> 00:18:06,740 ОК. 295 00:18:06,740 --> 00:18:12,900 Так што памятаеце з папярэдняга слайда, быў таксама з мінулага тыдня, што 296 00:18:12,900 --> 00:18:18,890 масіў сімвалаў, ну, гэта радок, так скажам гэта наша радок з. 297 00:18:18,890 --> 00:18:29,870 Так што калі з гэта радок, прывітанне, а затым, Н-Е-Л-Л-О, у памяці, што адбываецца, каб 298 00:18:29,870 --> 00:18:35,610 быць, і то гэта зваротная касая рыса 0 характар. 299 00:18:35,610 --> 00:18:39,170 >> Так як жа нам атрымаць даўжыню з? 300 00:18:39,170 --> 00:18:43,190 Ну, трук шукае гэты люфта 0 характар, гэты нуль 301 00:18:43,190 --> 00:18:44,380 тэрмінатар. 302 00:18:44,380 --> 00:18:50,270 Такім чынам, алгарытм Збіраецца павінна быць нешта, як мала 303 00:18:50,270 --> 00:18:51,510 дастаткова знакаў, якія - 304 00:18:51,510 --> 00:18:56,180 давайце гэтая рука ўяўляюць некаторыя лічыльнік, давайце назавем гэтую даўжыню Int. 305 00:18:56,180 --> 00:19:00,060 Так, пачынаючы з тут, мы збіраецца перабраць нашай радка. 306 00:19:00,060 --> 00:19:04,100 >> Такім чынам, першы знак, гэта H, і гэта не зваротны слэш 0, так што 307 00:19:04,100 --> 00:19:05,170 даўжыня роўная 1. 308 00:19:05,170 --> 00:19:08,050 Перабор да наступнага знаку, E, і гэта не зваротны слэш 0. 309 00:19:08,050 --> 00:19:09,630 Даўжыня складае 2. 310 00:19:09,630 --> 00:19:10,960 L, 3. 311 00:19:10,960 --> 00:19:11,850 L, 4. 312 00:19:11,850 --> 00:19:13,050 O, 5. 313 00:19:13,050 --> 00:19:16,690 І, нарэшце, мы дасягаем зваротны слэш 0, і так, каб сродкі, ну, 314 00:19:16,690 --> 00:19:17,780 гэты радок скончылася. 315 00:19:17,780 --> 00:19:20,130 Так давайце вернемся 5. 316 00:19:20,130 --> 00:19:33,630 >> Таму на самай справе рэалізацыі, што, па-першае, мая даўжыня п роўная 0, мая правая рука. 317 00:19:33,630 --> 00:19:36,088 І мы збіраемся для ітэрацыі - 318 00:19:36,088 --> 00:19:38,000 >> Выступоўца 1: [неразборліва] 319 00:19:38,000 --> 00:19:38,640 >> ROB BODEN: О, чорт. 320 00:19:38,640 --> 00:19:39,870 Добрае слова. 321 00:19:39,870 --> 00:19:42,680 Бум. 322 00:19:42,680 --> 00:19:44,140 Так даўжыня п роўная 0. 323 00:19:44,140 --> 00:19:46,910 324 00:19:46,910 --> 00:19:58,310 Так што цяпер, даўжыня ў той час як з не роўныя, а затым, зваротны слеш 0. 325 00:19:58,310 --> 00:20:04,660 Так што памятаеце, гэты зваротны слеш 0, гэта Фактычны сімвал, і гэта азначае, 326 00:20:04,660 --> 00:20:05,820 канец радка. 327 00:20:05,820 --> 00:20:09,850 Гэтак жа, як, таксама, касая рыса н з'яўляецца актуальнай характар. 328 00:20:09,850 --> 00:20:14,040 Зваротная касая рыса 0 збіраецца паказваюць канец нашай радка. 329 00:20:14,040 --> 00:20:15,414 Я не хачу, каб пакласці, што там. 330 00:20:15,414 --> 00:20:19,190 331 00:20:19,190 --> 00:20:25,620 І ў той час з індэксуюцца даўжынёй не роўная нулявы канчатак, то 332 00:20:25,620 --> 00:20:27,130 мы толькі збіраемся, каб павялічыць даўжыню. 333 00:20:27,130 --> 00:20:29,860 334 00:20:29,860 --> 00:20:34,880 Такім чынам, у канцы нашай праграмы, даўжыня ў канчатковым выніку будзе 335 00:20:34,880 --> 00:20:37,610 быць 5 у гэтым выпадку. 336 00:20:37,610 --> 00:20:39,210 І мы будзем проста вярнуць даўжыню. 337 00:20:39,210 --> 00:20:42,570 338 00:20:42,570 --> 00:20:43,530 >> ОК. 339 00:20:43,530 --> 00:20:48,290 Так што цяпер тут, я не зрабіць my_strlen. 340 00:20:48,290 --> 00:20:50,700 Давайце скампіляваць яго, каб пераканацца, ўсё праходзіць гладка. 341 00:20:50,700 --> 00:20:55,820 342 00:20:55,820 --> 00:20:58,210 Ці быў я раблю ў 2? 343 00:20:58,210 --> 00:21:00,565 Ці ў тым, што 1? 344 00:21:00,565 --> 00:21:01,940 Гэта павінна зрабіць. 345 00:21:01,940 --> 00:21:02,690 Добра. 346 00:21:02,690 --> 00:21:08,490 Так што гэта агду 2. 347 00:21:08,490 --> 00:21:11,585 Працуе, як чакалася, хоць было тое, што адзін я зрабіў гэта ў? 348 00:21:11,585 --> 00:21:15,060 349 00:21:15,060 --> 00:21:15,550 Так. 350 00:21:15,550 --> 00:21:16,760 ОК. 351 00:21:16,760 --> 00:21:21,820 Гэтая версія рэчаў не было Е новая лінія пасля, але гэта 352 00:21:21,820 --> 00:21:22,910 не мае ніякага значэння. 353 00:21:22,910 --> 00:21:23,300 ОК. 354 00:21:23,300 --> 00:21:25,780 Так працавала як чакалася. 355 00:21:25,780 --> 00:21:34,750 >> Цяпер мы можам нават сумясціць гэта яшчэ адзін крок далей, калі апавяшчэнне тут, ну, 356 00:21:34,750 --> 00:21:38,920 па-першае, мы хапаючы StrLen з ARGV я, а затым мы ітэрацыі 357 00:21:38,920 --> 00:21:41,450 кожны знак у гэтым радку. 358 00:21:41,450 --> 00:21:47,480 Такім чынам, замест таго, каб рабіць, што, што, калі мы проста аб'яднаць гэтую логіку чакання 359 00:21:47,480 --> 00:21:50,740 пакуль мы патрапілі зваротны слэш 0 права у гэты цыкл? 360 00:21:50,740 --> 00:21:53,740 361 00:21:53,740 --> 00:22:07,490 Так ітэрацыі у той час як агду I, J робіць не роўныя зваротны слеш 0. 362 00:22:07,490 --> 00:22:10,680 Так што давайце запусціць яго ў першую чаргу. 363 00:22:10,680 --> 00:22:19,838 364 00:22:19,838 --> 00:22:21,180 >> Добра. 365 00:22:21,180 --> 00:22:27,655 Дык вось, гэта ўмова кажучы - 366 00:22:27,655 --> 00:22:38,090 367 00:22:38,090 --> 00:22:40,060 давайце растлумачым, што. 368 00:22:40,060 --> 00:22:49,140 Так што цяпер, хай гэта будзе наша агду. 369 00:22:49,140 --> 00:22:55,290 Таму, калі я проста пабег гэтую праграму раней, агду з'яўляецца масіў радкоў. 370 00:22:55,290 --> 00:23:03,100 Дык вось, калі я запускаю яго з кропкавай слэш ARGV 2, прывітанне свет, то агду 371 00:23:03,100 --> 00:23:07,650 само па сабе з'яўляецца даўжыня 3, для ARGV нуля, прывітанне, і свет. 372 00:23:07,650 --> 00:23:11,700 373 00:23:11,700 --> 00:23:19,660 >> А ўнутры кожнага з гэтых паказчыкаў, Сам масіў, дзе гэта будзе 374 00:23:19,660 --> 00:23:23,780 кропка, то гэта будзе слэш, я не ведаю, калі б гэта было правільнае кірунак, я 375 00:23:23,780 --> 00:23:25,680 не думаю, што гэта было. 376 00:23:25,680 --> 00:23:30,110 -R-V працяжнік, трэба больш месца. 377 00:23:30,110 --> 00:23:32,570 Давайце нарэзаць гэтым масіве. 378 00:23:32,570 --> 00:23:38,230 -R-V працяжнік 0, а затым зваротны слеш 0. 379 00:23:38,230 --> 00:23:43,160 А потым у беспарадку будзе прывітанне. 380 00:23:43,160 --> 00:23:45,910 Скажам, Н-Е зваротны слэш 0. 381 00:23:45,910 --> 00:23:51,130 І, нарэшце, W-O зваротны слеш 0. 382 00:23:51,130 --> 00:23:59,730 >> Такім чынам, алгарытм, які мы толькі што напісаў, ўкладзеных цыклаў, тое, што яны 383 00:23:59,730 --> 00:24:07,321 рабіць ёсць, мы спачатку павінны супрацьстаяць I, а затым J. 384 00:24:07,321 --> 00:24:15,206 Гэта было б прасцей з кодам на экран, Давайце вернемся да гэтага. 385 00:24:15,206 --> 00:24:17,476 ОК. 386 00:24:17,476 --> 00:24:24,600 Так заўважыць, што я гэта итератор гэта ітэрацыі па кожнай каманды 387 00:24:24,600 --> 00:24:25,610 лінія аргумент. 388 00:24:25,610 --> 00:24:28,870 І J з'яўляецца итератор ітэрацыі на працягу кожнага знака ў тым, што 389 00:24:28,870 --> 00:24:30,410 лінія аргумент каманднага. 390 00:24:30,410 --> 00:24:46,755 Дык што ж гэта ўнутраны Е робіць ёсць, мы Printf агду 0 0, Е 391 00:24:46,755 --> 00:24:58,680 агду 0 1, Е агду 0 2 0 3, 0 4, 0 5, 0 6, але цяпер, агду 0 7 збіраецца 392 00:24:58,680 --> 00:25:00,670 роўная зваротны слеш 0. 393 00:25:00,670 --> 00:25:05,730 >> Такім чынам, мы выйсці, што для цыклу, і цяпер я ітэрацыя 1. 394 00:25:05,730 --> 00:25:10,910 І зараз мы збіраемся друку агду 1 0, агду 1 студзеня - 395 00:25:10,910 --> 00:25:17,040 добра, цяпер, так як я выразаў прывітанне Карацей кажучы, агду Студзень 2 зноў будзе 396 00:25:17,040 --> 00:25:18,170 зваротны слеш 0. 397 00:25:18,170 --> 00:25:25,050 І так, павялічце I і працягнуць, і гэтак далей, пакуль мы не раздрукаваць ўсе 398 00:25:25,050 --> 00:25:28,580 свет, і тыя тры каманднага радка аргументы, і мы будзем выходзіць з 399 00:25:28,580 --> 00:25:31,670 знешні контур, і завяршыць нашу праграму. 400 00:25:31,670 --> 00:25:38,390 401 00:25:38,390 --> 00:25:39,640 ОК. 402 00:25:39,640 --> 00:25:43,903 403 00:25:43,903 --> 00:25:46,795 >> Так што давайце вяртацца сюды. 404 00:25:46,795 --> 00:25:49,670 405 00:25:49,670 --> 00:25:52,370 Такім чынам, вы атрымаеце некаторы знаёмства з аргументы каманднага радка на гэтым 406 00:25:52,370 --> 00:25:54,460 Адмысловая праблема ўсталяваць. 407 00:25:54,460 --> 00:25:56,630 >> Цяпер, адладка. 408 00:25:56,630 --> 00:26:01,680 Такім чынам, вы, напэўна, ужо павінен быў зрабіць некаторыя адладка з ваш папярэдні 409 00:26:01,680 --> 00:26:03,120 Праблема ўсталяваць. 410 00:26:03,120 --> 00:26:08,420 І адзін вельмі просты спосаб адладкі, Спачатку давайце паглядзім на праграмы багі. 411 00:26:08,420 --> 00:26:20,710 412 00:26:20,710 --> 00:26:23,830 Ну, шпацыруючы па гэтай праграме, мы збіраемся папрасіць у карыстальніка 413 00:26:23,830 --> 00:26:29,350 цэлы лік, захапіць, што цэлае, а затым, адвольна, у нас ёсць нейкі час цыклу, што 414 00:26:29,350 --> 00:26:32,280 толькі збіраецца змяншаць я пакуль гэта не роўна 10. 415 00:26:32,280 --> 00:26:35,820 Давайце проста выкажам здагадку, я ўводу цэлым лікам, вялікім чым 10. 416 00:26:35,820 --> 00:26:38,700 Так памяншэння я пакуль гэта не роўна 10. 417 00:26:38,700 --> 00:26:42,630 >> А потым у нас ёсць яшчэ час цыклу , Што, хоць я не роўная 0, мы 418 00:26:42,630 --> 00:26:44,540 збіраецца змяншаць I на 3. 419 00:26:44,540 --> 00:26:49,790 Так што калі вы бачыце намер памылка тут, гэта, што гэта будзе змяншаць я ў 420 00:26:49,790 --> 00:26:57,010 быць 10, а затым гэта пакуль пятля воля декремент я з 10, да 7, да 4, да 1, 421 00:26:57,010 --> 00:27:02,880 да адмоўнага 2, на адмоўны 5, і гэтак далей, мінус бясконцасці, так як я буду 422 00:27:02,880 --> 00:27:05,920 ніколі не роўныя 0. 423 00:27:05,920 --> 00:27:08,610 А потым у канцы гэтай праграмы, у нас ёсць функцыя Foo, які 424 00:27:08,610 --> 00:27:12,130 адбываецца друк, што я. 425 00:27:12,130 --> 00:27:16,520 >> Так што гэта кароткія і трывіяльна праграма, і памылка відавочная, 426 00:27:16,520 --> 00:27:18,790 асабліва пасля таго як я проста сказаў, што памылка была. 427 00:27:18,790 --> 00:27:24,840 Але мэта тут, ну, гэта можа на самай справе выглядае некаторыя з вашых 428 00:27:24,840 --> 00:27:30,040 рашэння ад прагнага ад апошняга Праблема ўсталяваць, і, магчыма, у вас ёсць 429 00:27:30,040 --> 00:27:32,800 некаторыя бясконцы цыкл у вашай праграме, і вы не маеце ні найменшага падання, 430 00:27:32,800 --> 00:27:34,100 чым гэта выклікана. 431 00:27:34,100 --> 00:27:38,690 Так вельмі карысным метадам адладкі гэта проста дадаць printfs 432 00:27:38,690 --> 00:27:40,180 ва ўсім кодзе. 433 00:27:40,180 --> 00:27:49,200 >> Дык вось я хачу Printf межамі першую чаргу, а пятля. 434 00:27:49,200 --> 00:27:53,155 І тут я хачу Printf, і я проста раздрукаваць I. 435 00:27:53,155 --> 00:27:55,670 436 00:27:55,670 --> 00:27:58,330 Я нават зрабіць у першую чаргу той час як цыкл, я. 437 00:27:58,330 --> 00:28:05,130 438 00:28:05,130 --> 00:28:09,040 Звонку, другі ў той час як пятля. 439 00:28:09,040 --> 00:28:12,170 Яшчэ раз, раздрукаваць ўнутры адсюль, значэнне я. 440 00:28:12,170 --> 00:28:16,270 441 00:28:16,270 --> 00:28:17,520 І давайце запусцім гэты. 442 00:28:17,520 --> 00:28:22,620 443 00:28:22,620 --> 00:28:24,800 >> Так кропка слэш адладкі. 444 00:28:24,800 --> 00:28:25,610 Калі ласка, увядзіце цэлы лік. 445 00:28:25,610 --> 00:28:28,150 Давайце зробім 13. 446 00:28:28,150 --> 00:28:28,760 І бум. 447 00:28:28,760 --> 00:28:33,300 Мы бачым, што мы зацыклення ўнутры другога час цыклу. 448 00:28:33,300 --> 00:28:36,305 Так што цяпер мы ведаем, што памылка ёсць. 449 00:28:36,305 --> 00:28:39,610 450 00:28:39,610 --> 00:28:45,610 Але Е адладкі цалкам выдатна, але як толькі вашы праграмы атрымаць 451 00:28:45,610 --> 00:28:50,560 больш і больш складанымі, існуе больш складаныя рашэнні 452 00:28:50,560 --> 00:28:51,705 атрымліваць усе зарабіла. 453 00:28:51,705 --> 00:28:52,955 Так што давайце выдаліць усе гэтыя printfs. 454 00:28:52,955 --> 00:29:06,242 455 00:29:06,242 --> 00:29:08,896 І давайце пераканаемся, што я не зрабіў зламаць што-небудзь. 456 00:29:08,896 --> 00:29:09,850 ОК. 457 00:29:09,850 --> 00:29:14,180 >> Такім чынам, праграма, якую мы збіраемся ўвесці называецца 458 00:29:14,180 --> 00:29:16,715 GDB, для GNU Debugger. 459 00:29:16,715 --> 00:29:21,892 460 00:29:21,892 --> 00:29:27,510 Ну, на самай справе, давайце прыбярэм адладкі для па-другое, і зрабіць адладку зноў. 461 00:29:27,510 --> 00:29:31,420 462 00:29:31,420 --> 00:29:34,440 Ну, на самай справе першы, добры ўрок у аргументы каманднага радка. 463 00:29:34,440 --> 00:29:37,780 Звярніце ўвагу, што гэта Clang каманда, якая з'яўляецца кампіляцыі ўсё перадаецца 464 00:29:37,780 --> 00:29:41,300 у камандным радку, гэта аргументы каманднага радка. 465 00:29:41,300 --> 00:29:46,250 Так як менавіта вы збіраецеся выкарыстоўваць аргументы каманднага радка, як мы 466 00:29:46,250 --> 00:29:51,500 раней, і як вы будзеце ў PSET 2, вось як Clang выкарыстоўвае іх. 467 00:29:51,500 --> 00:30:00,070 >> Так заўважыць, што гэта першы сцяг, працяжнік ggdb3, што гэта кажа ёсць, Clang, 468 00:30:00,070 --> 00:30:03,790 вы павінны скампіляваць гэты файл з Мэта, што мы ў канчатковым выніку 469 00:30:03,790 --> 00:30:05,380 трэба адладжваць яго. 470 00:30:05,380 --> 00:30:13,840 Так што, пакуль у вас ёсць гэты сцяг, то мы можам GDB адладжваць. 471 00:30:13,840 --> 00:30:17,380 І гэта будзе адкрыць GNU адладчык. 472 00:30:17,380 --> 00:30:22,920 >> Такім чынам, ёсць шмат каманд што вам трэба прывыкнуць. 473 00:30:22,920 --> 00:30:27,100 Спачатку адзін, што вы, верагодна, адразу трэба Run. 474 00:30:27,100 --> 00:30:28,200 Дык што ж Запусціце збіраецеся рабіць? 475 00:30:28,200 --> 00:30:30,910 Гэта збіраецца пачаць нашу праграму. 476 00:30:30,910 --> 00:30:36,180 Так бяжыце, пачынаючы праграму, праграму просіць нас для цэлага ліку, 13. 477 00:30:36,180 --> 00:30:39,170 А потым гэта бясконцае зацыкленне як Чакаецца, акрамя я выдаліў 478 00:30:39,170 --> 00:30:40,500 printfs, таму мы нават не бачым, што. 479 00:30:40,500 --> 00:30:43,320 480 00:30:43,320 --> 00:30:44,600 Выйшаў нармальна. 481 00:30:44,600 --> 00:30:45,850 О. 482 00:30:45,850 --> 00:30:48,570 483 00:30:48,570 --> 00:30:53,640 Цалкам магчыма, што гэта загорнутыя ўсё наадварот, да - ігнаруючы гэта. 484 00:30:53,640 --> 00:30:55,170 Выкажам здагадку, гэта не выйсці нармальна. 485 00:30:55,170 --> 00:30:59,500 486 00:30:59,500 --> 00:31:03,370 Там у складанай адказ на гэтае пытанне. 487 00:31:03,370 --> 00:31:07,890 >> Так што цяпер, гэта не вельмі карысна. 488 00:31:07,890 --> 00:31:11,480 Так проста працуе нашу праграму ўнутры гэта адладчык не памагчы нам у любым 489 00:31:11,480 --> 00:31:15,610 чынам, так як мы маглі толькі што зрабілі кропка слэш адладкі звонку GDB. 490 00:31:15,610 --> 00:31:21,250 Так каманда адна, што вы, верагодна, - 491 00:31:21,250 --> 00:31:22,970 і я кіну гэта. 492 00:31:22,970 --> 00:31:25,850 Control-D або кінуць паліць, і працу. 493 00:31:25,850 --> 00:31:29,550 Так давайце адкрыем яго зноў. 494 00:31:29,550 --> 00:31:31,130 >> Іншая каманда, што вы, верагодна, адразу хачу 495 00:31:31,130 --> 00:31:33,600 прывыкнуць да таго, Перапынак. 496 00:31:33,600 --> 00:31:37,120 Такім чынам, мы зламаю на галоўную на дадзены момант, а затым я растлумачу, што. 497 00:31:37,120 --> 00:31:41,010 498 00:31:41,010 --> 00:31:46,370 Ну, вось мы бачым, мы ўсталяваць кропку супыну на гэтай лініі ў debug.c. 499 00:31:46,370 --> 00:31:50,160 Так што перапынак сродкі з'яўляецца тое, што, калі я увядзіце бег, праграма будзе 500 00:31:50,160 --> 00:31:53,560 ня працягваць працаваць да таго часу, Я ўдарыў кропку супыну. 501 00:31:53,560 --> 00:31:59,390 Таму, калі я ударыў бег, праграма пачынае, а затым ён распадаецца, як толькі гэта 502 00:31:59,390 --> 00:32:01,940 ўваходзіць у асноўную функцыю. 503 00:32:01,940 --> 00:32:06,930 Перапынак асноўны будзе нешта Вы даволі часта рабіць. 504 00:32:06,930 --> 00:32:11,340 >> І зараз, каб пазнаёміць вас каб яшчэ некалькі каманд. 505 00:32:11,340 --> 00:32:14,330 Заўважце тут, то гэта гаворыць, што мы парушыў на лініі 11, які 506 00:32:14,330 --> 00:32:16,230 Е, увядзіце цэлы лік. 507 00:32:16,230 --> 00:32:21,260 Так каманда Наступны будзе, як мы ідзем у наступным радку кода. 508 00:32:21,260 --> 00:32:24,810 Гэта будзе, каб дазволіць нам крок праз нашу праграму радок за радком. 509 00:32:24,810 --> 00:32:26,260 Так што ў наступны. 510 00:32:26,260 --> 00:32:29,820 >> Цяпер лінія 12, мы збіраемся каб атрымаць цэлае. 511 00:32:29,820 --> 00:32:30,450 Наступная. 512 00:32:30,450 --> 00:32:34,290 І калі вы проста націсніце Enter зноў, яно будзе паўтарыць апошняе, што вы зрабілі. 513 00:32:34,290 --> 00:32:36,480 Так што я не трэба ўводзіць Наступны кожны раз. 514 00:32:36,480 --> 00:32:40,100 Так увядзіце цэлы лік, 13. 515 00:32:40,100 --> 00:32:46,940 Так што цяпер, радок 14, у той час як я больш чым 10, і я буду рабіць далей. 516 00:32:46,940 --> 00:32:48,685 І мы бачым, што мы збіраемся паменшыць I. 517 00:32:48,685 --> 00:32:50,210 Так што мы збіраемся для памяншэння я зноў. 518 00:32:50,210 --> 00:32:53,620 >> Так што цяпер, яшчэ адзін карысны каманда друку. 519 00:32:53,620 --> 00:32:55,750 Так Надрукаваць збіраецца раздрукаваць Значэнне зменнай. 520 00:32:55,750 --> 00:32:57,825 Давайце выявіць значэнне зменнай I. 521 00:32:57,825 --> 00:32:58,705 Давайце друкаваць I. 522 00:32:58,705 --> 00:33:00,910 Гэта будзе сказаць, што я на 11. 523 00:33:00,910 --> 00:33:03,330 Цяпер мы яшчэ раз Далей, у той час як я больш за 10. 524 00:33:03,330 --> 00:33:05,590 Так што я па-ранейшаму больш, чым 10, так як гэта 11. 525 00:33:05,590 --> 00:33:06,920 я мінус мінус. 526 00:33:06,920 --> 00:33:08,250 Давайце друкаваць я зноў. 527 00:33:08,250 --> 00:33:10,950 Як і чакалася, гэта 10. 528 00:33:10,950 --> 00:33:12,510 >> Так што цяпер, побач. 529 00:33:12,510 --> 00:33:16,250 Гэта вяртаючыся да стану, я гэта больш за 10, але я цяпер 10, так што 530 00:33:16,250 --> 00:33:20,040 гэта не больш за 10, таму мы чакаем, гэта выпасці з той час цыклу. 531 00:33:20,040 --> 00:33:22,220 І зараз мы ніжэй гэтага радка кода. 532 00:33:22,220 --> 00:33:28,750 І іншая каманда, Спіс, проста будзе для адлюстравання папярэдняга і наступнага 533 00:33:28,750 --> 00:33:31,240 пару радкоў кода, у выпадку, калі вы страцілі сябе. 534 00:33:31,240 --> 00:33:35,420 Так што мы проста выйшлі гэтую той час як цыкл, і цяпер мы ўступілі ў гэтым 535 00:33:35,420 --> 00:33:37,080 у той час як цыкл, лінія 18. 536 00:33:37,080 --> 00:33:39,860 Такім чынам, хоць я не роўна 0. 537 00:33:39,860 --> 00:33:46,570 І, далей, я роўная I мінус 3, і мы будзем Адзначым, гэта будзе проста працягваць ісці. 538 00:33:46,570 --> 00:33:48,270 І мы можам надрукаваць I. 539 00:33:48,270 --> 00:33:49,990 >> Кожная каманда роду мае ярлыкі. 540 00:33:49,990 --> 00:33:51,720 Так р кароткі для друку. 541 00:33:51,720 --> 00:33:53,400 Такім чынам, мы можам P I. 542 00:33:53,400 --> 00:33:57,550 Проста ўтрымлівайце п, або працягваць рабіць Далей. 543 00:33:57,550 --> 00:33:58,340 Надрукаваць я зноў. 544 00:33:58,340 --> 00:34:00,380 Вы бачыце зараз ён адмоўны 167. 545 00:34:00,380 --> 00:34:06,030 Так што гэта будзе працягвацца вечна, але не сапраўды назаўжды, так як вы толькі што бачылі, гэта 546 00:34:06,030 --> 00:34:09,330 на самай справе канец у некаторай кропцы. 547 00:34:09,330 --> 00:34:15,699 >> Так што, пачынаючы GDB. 548 00:34:15,699 --> 00:34:19,504 Але давайце зробім яшчэ адну рэч у GDB. 549 00:34:19,504 --> 00:34:20,754 Э-э, адладкі. 550 00:34:20,754 --> 00:34:23,540 551 00:34:23,540 --> 00:34:28,534 Такім чынам, у дадзеным канкрэтным выпадку бясконцы цыкл, аказалася, усярэдзіне 552 00:34:28,534 --> 00:34:30,050 асноўная функцыя. 553 00:34:30,050 --> 00:34:35,779 І на дадзены момант, проста прызнаць, што, што я будзе рухацца бясконцы цыкл у 554 00:34:35,779 --> 00:34:37,029 функцыя Foo. 555 00:34:37,029 --> 00:34:40,679 556 00:34:40,679 --> 00:34:43,730 Толькі памятайце, што, у канцы гэтага Праграма, таксама, гэта было першапачаткова 557 00:34:43,730 --> 00:34:46,210 выкліку Foo, які быў проста да друку I. 558 00:34:46,210 --> 00:34:51,880 Але цяпер мы называем Фу, які з'яўляецца збіраецца змяншаць I, пакуль гэта не 0, а 559 00:34:51,880 --> 00:34:54,548 затым раздрукаваць гэтую зменную. 560 00:34:54,548 --> 00:34:55,469 ОК. 561 00:34:55,469 --> 00:34:57,970 Захаваць гэта. 562 00:34:57,970 --> 00:35:00,175 Зрабіць адладкі. 563 00:35:00,175 --> 00:35:03,310 А цяпер, GDB адладкі. 564 00:35:03,310 --> 00:35:04,090 ОК. 565 00:35:04,090 --> 00:35:10,580 >> Так што, калі я проста запусціць то я не збіраюся быць у стане фактычна пакрокава мой 566 00:35:10,580 --> 00:35:11,730 Праграма лінія за лініяй. 567 00:35:11,730 --> 00:35:19,820 Так давайце разбяром на асноўнай, а затым увядзіце перспектыве. 568 00:35:19,820 --> 00:35:28,160 Так прайсці праз гэта, Е, увядзіце цэлы лік, атрымаць цэлае, 13. 569 00:35:28,160 --> 00:35:34,180 570 00:35:34,180 --> 00:35:37,490 Такім чынам, мы збіраемся працягваць памяншаючы пакуль я не больш за 10. 571 00:35:37,490 --> 00:35:42,840 Тады мы ідзем, каб праваліцца у той час як цыкл, і дабрацца да лініі - 572 00:35:42,840 --> 00:35:44,364 давайце адкрыем яго ў асобным акне. 573 00:35:44,364 --> 00:35:48,720 574 00:35:48,720 --> 00:35:53,300 Такім чынам, мы не памяншаецца, пакуль я ўжо не больш за 10, і тады мы 575 00:35:53,300 --> 00:35:55,700 называецца функцыяй, Foo. 576 00:35:55,700 --> 00:36:01,340 >> Так што ж адбылося, як толькі я трапіў Функцыя Foo, ну, я патэлефанаваў Фу, і 577 00:36:01,340 --> 00:36:04,030 а то я ўжо не меў кантролю над GDB. 578 00:36:04,030 --> 00:36:10,230 Таму, як толькі я ўдарыў Далей у гэтай лініі, рэчы працягвалі, пакуль гэта не адбылося, 579 00:36:10,230 --> 00:36:12,400 дзе выйшла праграма, калі - 580 00:36:12,400 --> 00:36:14,450 выказаць здагадку, што гэта не было ў рэшце рэшт. 581 00:36:14,450 --> 00:36:16,390 Вы бачылі гэта прыпыніць на некаторы час усё ж. 582 00:36:16,390 --> 00:36:22,040 Дык чаму ж я губляю кантроль над праграма ў гэты момант? 583 00:36:22,040 --> 00:36:27,540 Ну, калі я друкую наступны, які ідзе ў літаральны Наступны радок кода, што 584 00:36:27,540 --> 00:36:28,850 будзе выконваць. 585 00:36:28,850 --> 00:36:35,950 Такім чынам, пасля лініі 21, у наступным радку кода , Які будзе выконваць гэта лінія 22, 586 00:36:35,950 --> 00:36:38,520 які, выходзячы з асноўнай. 587 00:36:38,520 --> 00:36:43,810 Так што я не хачу, каб проста пайсці у наступным радку кода. 588 00:36:43,810 --> 00:36:48,170 Я хачу пайсці ў функцыю, Фу, а потым яшчэ і па кроках 589 00:36:48,170 --> 00:36:49,830 гэтыя радкі кода. 590 00:36:49,830 --> 00:36:53,726 >> Такім чынам, для гэтага ў нас ёсць альтэрнатыва. 591 00:36:53,726 --> 00:36:56,770 Давайце кінуць гэта зноў. 592 00:36:56,770 --> 00:36:58,020 Перапынак асноўнай. 593 00:36:58,020 --> 00:37:00,520 594 00:37:00,520 --> 00:37:06,370 Э-э, 1, побач, побач, 13, побач, Далей, наступны, асцярожна, 595 00:37:06,370 --> 00:37:09,820 перш чым мы патрапілі радкі Foo. 596 00:37:09,820 --> 00:37:10,520 ОК. 597 00:37:10,520 --> 00:37:13,700 >> Так што цяпер, мы ў радку 21, дзе мы называем Foo. 598 00:37:13,700 --> 00:37:17,100 Мы не хочам, каб увесці наступны, так што проста выклікаць функцыю Фу, і 599 00:37:17,100 --> 00:37:18,710 перайсці да наступнай радку кода. 600 00:37:18,710 --> 00:37:20,840 Што мы хочам выкарыстоўваць гэта Крок. 601 00:37:20,840 --> 00:37:25,690 Так што ёсць розніца паміж кроку А побач, дзе Крок крокі ў 602 00:37:25,690 --> 00:37:28,190 функцыянаваць, і Наступны ідзе на сябе функцыю. 603 00:37:28,190 --> 00:37:32,830 Гэта проста выконвае паўнату функцыя, і працягвае ісці. 604 00:37:32,830 --> 00:37:37,210 >> Так Крок збіраецца прывесці нас у функцыю, Foo. 605 00:37:37,210 --> 00:37:41,160 І мы бачым тут, зараз, калі мы вярнуліся ў гэта ў той час як цыкл, які гэта, па ідэі, 606 00:37:41,160 --> 00:37:44,190 збіраецца працягвацца вечна. 607 00:37:44,190 --> 00:37:50,420 І калі вы патрапілі Крок, калі гэта нават не функцыя выклікаецца, то гэта 608 00:37:50,420 --> 00:37:51,720 ідэнтычны Далей. 609 00:37:51,720 --> 00:37:55,320 Так што гэта толькі тады, калі вы знаходзіцеся на лініі, якая выклікае функцыю на гэты крок 610 00:37:55,320 --> 00:37:56,970 збіраецца адрознівацца ад Next. 611 00:37:56,970 --> 00:37:57,930 Так Крок прынясе нам тут. 612 00:37:57,930 --> 00:38:02,100 Крок, крок, крок, крок, крок, крок, і мы проста бясконцы цыкл назаўжды. 613 00:38:02,100 --> 00:38:06,810 >> Так што вы можаце прывыкнуць да таго, як ваш спосаб ідэнтыфікацыі бясконцыя цыклы, з'яўляецца 614 00:38:06,810 --> 00:38:08,960 проста трымаючы гэтую клавішу ўводу, каб ўбачыць, дзе вы затрымаліся. 615 00:38:08,960 --> 00:38:11,610 616 00:38:11,610 --> 00:38:14,780 Ёсць больш эфектыўныя спосабы зрабіць гэта, але на дадзены момант, гэта значыць цалкам дастаткова. 617 00:38:14,780 --> 00:38:17,967 І стылістычна, каб адпавядаць стылю 50, я павінен быў зрабіць гэта. 618 00:38:17,967 --> 00:38:21,550 619 00:38:21,550 --> 00:38:24,030 ОК. 620 00:38:24,030 --> 00:38:28,400 >> Так што апошняя каманда ўвесці. 621 00:38:28,400 --> 00:38:30,810 Ну, давайце GDB адладжваць цалі 622 00:38:30,810 --> 00:38:35,580 Таму замест таго, ламаючы пры асноўны, калі я ведаць функцыю Foo таксама 623 00:38:35,580 --> 00:38:39,230 Праблема, то я, магчыма, проста сказаў, перапынак на Foo, замест гэтага. 624 00:38:39,230 --> 00:38:42,310 Скажам, я разарваць на як асноўны і Foo. 625 00:38:42,310 --> 00:38:45,390 Такім чынам, вы можаце ўсталяваць столькі кропак супыну як вы хочаце. 626 00:38:45,390 --> 00:38:49,230 Калі я друкую працаваць, гэта будзе спыняцца на - 627 00:38:49,230 --> 00:38:52,180 ох, давайце перакампіляваць, так як Я змяніў рэчы. 628 00:38:52,180 --> 00:38:55,950 Вы ўбачыце гэты радок, папярэджанне, крыніца файл больш новае, чым выкананы файл. 629 00:38:55,950 --> 00:38:59,680 Дык гэта значыць, што я проста пайшоў сюды і змяніў іх у адпаведнасць з стылі 630 00:38:59,680 --> 00:39:03,100 50, але я не перакампіляваць праграма. 631 00:39:03,100 --> 00:39:04,870 Так GDB робіць мяне ў курсе. 632 00:39:04,870 --> 00:39:10,130 Я кіну, зрабіць адладку зноў, ўдарыў GDB адладжваць. 633 00:39:10,130 --> 00:39:10,700 ОК. 634 00:39:10,700 --> 00:39:12,800 >> Так што цяпер, да таго, што я рабіў. 635 00:39:12,800 --> 00:39:15,720 Перапынак асноўны, перапынак Foo. 636 00:39:15,720 --> 00:39:20,680 Цяпер, калі я запускаю праграму, так што гэта збіраецца працягнуць, пакуль не трапляе 637 00:39:20,680 --> 00:39:21,320 супыну. 638 00:39:21,320 --> 00:39:24,680 Гэта супыну адбываецца з быць першым у асноўны. 639 00:39:24,680 --> 00:39:28,630 Цяпер, замест таго, каб рабіць наступны, наступны, наступны, наступны, наступны, пакуль я не патрапіў Фу, я 640 00:39:28,630 --> 00:39:35,230 можна ўвесці працягваць, якая будзе працягвацца пакуль вы не патрапілі наступнай кропкі супыну. 641 00:39:35,230 --> 00:39:37,200 Я павінен увесці цэлае першым. 642 00:39:37,200 --> 00:39:40,570 Працягнуць будзе працягвацца, пакуль я не трапіў наступнай кропкі, якая з'яўляецца тое, што 643 00:39:40,570 --> 00:39:43,320 функцыя харчовы. 644 00:39:43,320 --> 00:39:50,130 >> Так Run будзе працаваць, пакуль вы націснеце супыну, але вы толькі тып запуску, калі 645 00:39:50,130 --> 00:39:54,060 вы пачынаеце праграму, а затым, з тых часоў, гэта працягваць. 646 00:39:54,060 --> 00:40:01,950 Калі б я проста зрабіў брэйк асноўны і потым пабег, ён будзе перапынак у 647 00:40:01,950 --> 00:40:03,670 Асноўны, а затым працягнуць. 648 00:40:03,670 --> 00:40:10,050 Паколькі ў мяне няма кропкі супыну на Foo, увядзіце цэлае, то зараз я 649 00:40:10,050 --> 00:40:11,380 не збіраецца зламаць у харчовай. 650 00:40:11,380 --> 00:40:16,318 Гэта проста будзе да бясконцасці цыкл, пакуль што. 651 00:40:16,318 --> 00:40:17,568 ОК. 652 00:40:17,568 --> 00:40:19,500 653 00:40:19,500 --> 00:40:24,420 >> Дык вось Уводзіны ў GDB. 654 00:40:24,420 --> 00:40:27,790 Вы павінны пачаць выкарыстоўваць яго ў вашых праблемных мностваў. 655 00:40:27,790 --> 00:40:30,550 Гэта можа быць вельмі карысна вызначыць памылкі. 656 00:40:30,550 --> 00:40:35,280 Калі вы на самой справе проста, лінія за лініяй, перайдзіце па кодзе, і параўнаць тое, што з'яўляецца 657 00:40:35,280 --> 00:40:39,740 на самай справе адбываецца з тым, што вы чакаеце адбудзецца, то гэта даволі 658 00:40:39,740 --> 00:40:41,060 цяжка не заўважыць вашыя памылкі. 659 00:40:41,060 --> 00:40:45,280 660 00:40:45,280 --> 00:40:46,530 ОК. 661 00:40:46,530 --> 00:40:48,310 662 00:40:48,310 --> 00:40:54,040 >> Так на мінулым тыдні Дэвід выхоўваўся гэты сакрэтным ключом рэчы для 663 00:40:54,040 --> 00:40:59,350 першы раз, калі мы не хочам паролі проста захоўвацца на нашым 664 00:40:59,350 --> 00:41:03,210 кампутар у пэўным простым тэкставым файле, дзе хто-то можа прыехаць і проста 665 00:41:03,210 --> 00:41:04,660 адкрыць яго і прачытаць іх. 666 00:41:04,660 --> 00:41:07,530 У ідэале, яны будуць зашыфраваныя у некаторым родзе. 667 00:41:07,530 --> 00:41:13,340 І ў задачы ўсталяваць 2, вы будзеце мець справу з аднаго спосабу шыфравання, 668 00:41:13,340 --> 00:41:16,520 або, ну, два метаду, але яны не настолькі вялікія. 669 00:41:16,520 --> 00:41:20,050 Калі вы робіце хакер выданне, вы таксама збіраецца мець справу з 670 00:41:20,050 --> 00:41:22,150 расшыфроўкі некаторыя рэчы. 671 00:41:22,150 --> 00:41:29,770 >> Так што пытанне цяпер у тым, добра, нават калі у нас ёсць ўстойлівае шыфраванне 672 00:41:29,770 --> 00:41:34,830 Алгарытм ў свеце, калі вы выбіраеце асабліва бедных пароль, то яна 673 00:41:34,830 --> 00:41:37,720 не дапаможа вам вельмі шмат, так як людзі яшчэ змогуць зразумець гэта. 674 00:41:37,720 --> 00:41:41,530 Нават калі паглядзець зашыфраваную радок і гэта выглядае як беспарадак смецця 675 00:41:41,530 --> 00:41:44,760 што нічога не значыць для іх, калі яны яшчэ проста трэба паспрабаваць некалькі пароляў 676 00:41:44,760 --> 00:41:50,560 каб зразумець гэта, то вы не вельмі бяспечна. 677 00:41:50,560 --> 00:41:55,890 Так праглядзе відэа, робіць гэтую кропку. 678 00:41:55,890 --> 00:41:59,587 679 00:41:59,587 --> 00:42:00,970 >> [ВИДЕОВОСПРОИЗВЕДЕНИЕ] 680 00:42:00,970 --> 00:42:02,100 >> -Шлем, вы злыдзень. 681 00:42:02,100 --> 00:42:03,370 Што адбываецца? 682 00:42:03,370 --> 00:42:05,170 Што ты робіш з маёй дачкой? 683 00:42:05,170 --> 00:42:09,910 >> -Дазвольце мне прадставіць бліскучы малады пластычны хірург, доктар Філіп 684 00:42:09,910 --> 00:42:13,730 Schlotkin, найбольшую нос праца мужчына ў ўсёй 685 00:42:13,730 --> 00:42:16,080 Сусвету, і Бэверлі-Хілз. 686 00:42:16,080 --> 00:42:17,210 >> -Ваша Высокасць. 687 00:42:17,210 --> 00:42:18,070 >> -Нос праца? 688 00:42:18,070 --> 00:42:18,670 Не разумею. 689 00:42:18,670 --> 00:42:20,090 Яна ўжо была праца носа. 690 00:42:20,090 --> 00:42:21,910 Гэта быў салодкі шаснаццаць прысутнічае. 691 00:42:21,910 --> 00:42:22,140 >> -Не. 692 00:42:22,140 --> 00:42:23,690 Гэта не тое, што вы думаеце. 693 00:42:23,690 --> 00:42:25,420 Гэта значна, значна горш. 694 00:42:25,420 --> 00:42:30,300 Калі вы не даяце мне камбінацыю, каб паветра шчыт, доктар Schlotkin будзе 695 00:42:30,300 --> 00:42:34,226 даць сваю дачку зваротна свой стары нос. 696 00:42:34,226 --> 00:42:35,476 >> -Не. 697 00:42:35,476 --> 00:42:38,712 698 00:42:38,712 --> 00:42:40,516 Дзе ты гэта ўзяў? 699 00:42:40,516 --> 00:42:41,440 >> -Усё ў парадку. 700 00:42:41,440 --> 00:42:42,180 Я скажу. 701 00:42:42,180 --> 00:42:43,381 Я скажу. 702 00:42:43,381 --> 00:42:44,263 Не, тата. 703 00:42:44,263 --> 00:42:45,590 Не, вы не павінны. 704 00:42:45,590 --> 00:42:46,860 >> -Вы маеце рацыю, мая дарагая. 705 00:42:46,860 --> 00:42:48,450 Я буду сумаваць па вашай новай нос. 706 00:42:48,450 --> 00:42:52,090 Але я не скажу яму камбінацыю, нягледзячы ні на што. 707 00:42:52,090 --> 00:42:53,680 >> -Вельмі добра. 708 00:42:53,680 --> 00:42:55,685 Доктар Schlotkin, справа ваша. 709 00:42:55,685 --> 00:42:56,914 >> -З задавальненнем. 710 00:42:56,914 --> 00:43:00,690 >> [ІНСТРУМЕНТЫ точаць] 711 00:43:00,690 --> 00:43:01,910 >> -Не. 712 00:43:01,910 --> 00:43:02,520 Пачакайце. 713 00:43:02,520 --> 00:43:03,836 Пачакайце. 714 00:43:03,836 --> 00:43:05,300 Я скажу. 715 00:43:05,300 --> 00:43:06,880 Я скажу. 716 00:43:06,880 --> 00:43:09,130 >> -Я ведаў, што гэта будзе працаваць. 717 00:43:09,130 --> 00:43:09,900 Добра. 718 00:43:09,900 --> 00:43:12,850 Аддай яго мне. 719 00:43:12,850 --> 00:43:16,918 >> Спалучэнне-адзін. 720 00:43:16,918 --> 00:43:17,406 >> -Адзін. 721 00:43:17,406 --> 00:43:18,382 >> -Адзін. 722 00:43:18,382 --> 00:43:19,358 >> -Два. 723 00:43:19,358 --> 00:43:19,846 >> -Два. 724 00:43:19,846 --> 00:43:20,822 >> -Два. 725 00:43:20,822 --> 00:43:21,310 >> -Тры. 726 00:43:21,310 --> 00:43:21,798 >> -Тры. 727 00:43:21,798 --> 00:43:22,774 >> -Тры. 728 00:43:22,774 --> 00:43:23,262 >> -Чатыры. 729 00:43:23,262 --> 00:43:23,750 >> -Чатыры. 730 00:43:23,750 --> 00:43:26,150 >> -Чатыры. 731 00:43:26,150 --> 00:43:27,010 >> -Пяць. 732 00:43:27,010 --> 00:43:27,670 >> -Пяць. 733 00:43:27,670 --> 00:43:29,010 >> -Пяць. 734 00:43:29,010 --> 00:43:34,770 >> -Так спалучэнне з'яўляецца адным, два, тры, чатыры, пяць. 735 00:43:34,770 --> 00:43:37,460 Гэта самая дурная камбінацыя Я калі-небудзь чуў у сваім жыцці. 736 00:43:37,460 --> 00:43:39,710 Гэта тая рэч, ідыёт будзе мець на сваім багажы. 737 00:43:39,710 --> 00:43:42,000 >> -Дзякуй, ваша высокасць. 738 00:43:42,000 --> 00:43:43,530 >> -Што ты зрабіў? 739 00:43:43,530 --> 00:43:44,490 >> -Я выключыў сцяну. 740 00:43:44,490 --> 00:43:45,420 >> -Не, ты не зрабіў. 741 00:43:45,420 --> 00:43:45,840 Вы выключылі ўвесь фільм. 742 00:43:45,840 --> 00:43:46,930 >> -Павінна быць, я націснуў не тую кнопку. 743 00:43:46,930 --> 00:43:48,265 >> -Ну, паклаў яго назад на. 744 00:43:48,265 --> 00:43:49,110 Пакладзеце відэафільм на. 745 00:43:49,110 --> 00:43:49,510 >> -Так, сэр. 746 00:43:49,510 --> 00:43:49,917 Так, сэр. 747 00:43:49,917 --> 00:43:50,324 >> -Хадзем, Арнольд. 748 00:43:50,324 --> 00:43:51,140 Прыходзьце, Гретхен. 749 00:43:51,140 --> 00:43:53,060 Вядома, вы ведаеце, я буду па-ранейшаму павінны выставіць вам рахунак за гэта. 750 00:43:53,060 --> 00:43:53,440 >> [КАНЕЦ ВИДЕОВОСПРОИЗВЕДЕНИЕ] 751 00:43:53,440 --> 00:43:54,690 >> ROB BODEN: Добра. 752 00:43:54,690 --> 00:43:59,690 753 00:43:59,690 --> 00:44:08,430 Так што цяпер мы ўжо гаворым пра бяспекі ў некаторых адносінах, добры 754 00:44:08,430 --> 00:44:16,050 трохі постэр фільма, таму ў апошні час дзён, гэтыя пытанні з АНБ 755 00:44:16,050 --> 00:44:17,300 маніторынгу ўсё. 756 00:44:17,300 --> 00:44:21,840 757 00:44:21,840 --> 00:44:26,930 Гэта можа быць цяжка, каб адчуваць, што вы ёсць свайго роду прыватнай жыцця ў 758 00:44:26,930 --> 00:44:34,540 Анлайнавы свет, хоць я не мог сказаць Вас больш дэталяў PRISM. 759 00:44:34,540 --> 00:44:42,130 Дык выходзіць за рамкі PRISM, мы не збіраемся каб гаварыць аб тым, што, у цяперашні час 760 00:44:42,130 --> 00:44:44,030 думаю пра сваё ноўтбуку. 761 00:44:44,030 --> 00:44:48,360 Так тут, я хачу, каб перайсці да маёй рэальнай увагу, 762 00:44:48,360 --> 00:44:50,370 з маёй маленькай пінгвіна. 763 00:44:50,370 --> 00:44:57,310 Так у мяне ёсць набор пароляў, і што пароль, што я хачу, каб гэта было. 764 00:44:57,310 --> 00:45:02,430 >> Але памятайце, што тое, што я ўваходу у з, так што гэта Увайсці 765 00:45:02,430 --> 00:45:04,850 падкажыце, ёсць нейкая праграма. 766 00:45:04,850 --> 00:45:07,910 Гэта нейкая праграма, якая была напісана некалькі чалавек. 767 00:45:07,910 --> 00:45:13,250 І так, што чалавек, калі яны асабліва шкоднасным, яны маглі 768 00:45:13,250 --> 00:45:17,780 ўжо казалі, усё ў парадку, так што, калі пароль што я ўваходжу роўная мой 769 00:45:17,780 --> 00:45:22,800 рэальны пароль, ці ён роўны ў некаторай спецыяльнага пароля - 770 00:45:22,800 --> 00:45:25,550 Дэвід з'яўляецца дзіўным ці нешта - 771 00:45:25,550 --> 00:45:27,190 дык няхай іх сюды 772 00:45:27,190 --> 00:45:33,760 Так шкоднасны праграміст можа мець доступ да ўсіх вашым Mac, або 773 00:45:33,760 --> 00:45:36,150 Вокны, або што-небудзь. 774 00:45:36,150 --> 00:45:41,980 >> Так што гэта не вялікая праблема, так як, Я маю на ўвазе, гэта Увайсці праграма 775 00:45:41,980 --> 00:45:48,720 які пастаўляецца з OS X, сотні ці тысячы людзей маюць 776 00:45:48,720 --> 00:45:50,020 водгукі гэты код. 777 00:45:50,020 --> 00:45:55,330 Дык вось, калі, у кодзе дзесьці, вы кажуць, што калі гэты радок роўная роўных 778 00:45:55,330 --> 00:45:58,860 Дэвід з'яўляецца дзіўным, Лагін, то хто-то будзе, як, пачакайце. 779 00:45:58,860 --> 00:45:59,800 Гэта не правільна. 780 00:45:59,800 --> 00:46:01,790 Гэта не павінна быць тут. 781 00:46:01,790 --> 00:46:06,650 Дык вось адзін са спосабаў атрымаць рэчы быць свайго роду бяспечным. 782 00:46:06,650 --> 00:46:10,300 >> Але думаць пра нават праграм што вы пішаце. 783 00:46:10,300 --> 00:46:13,000 Дапусцім, вы напісалі праграму ўваходу ў сістэму. 784 00:46:13,000 --> 00:46:20,440 Так што гэта Увайсці праграма, што вы напісалі, так што, відавочна, вы добры 785 00:46:20,440 --> 00:46:21,210 праграміст. 786 00:46:21,210 --> 00:46:25,610 Вы не збіраецеся паставіць любы шкоднасны калі х = роўная Дэвід з'яўляецца дзіўным 787 00:46:25,610 --> 00:46:27,860 у код. 788 00:46:27,860 --> 00:46:31,930 Але гэтая праграма, тое, што вы выкарыстоўваць для кампіляцыі гэтай праграмы? 789 00:46:31,930 --> 00:46:34,180 Нешта накшталт Clang. 790 00:46:34,180 --> 00:46:38,460 Так што калі чалавек, які, аказалася, напісаць Clang спецыяльнае упакаваных у Clang 791 00:46:38,460 --> 00:46:44,310 нешта накшталт, калі я кампіляцыі увайдзіце праграму, а затым увядзіце гэты код 792 00:46:44,310 --> 00:46:49,720 ў праграму аўтарызацыі, якая кажа, калі х роўная роўная Дэвід з'яўляецца дзіўным? 793 00:46:49,720 --> 00:46:59,890 Так што не зусім яшчэ, але ў нас ёсць тое ж самае выдаваць тут, дзе Clang, ну, 794 00:46:59,890 --> 00:47:03,790 тысячы, калі не дзясяткі тысяч людзі, глядзелі на Clang, ёсць 795 00:47:03,790 --> 00:47:07,160 паглядзеў на яе радкоў кода і сказаў: Усё ў парадку, няма нічога дрэнна тут. 796 00:47:07,160 --> 00:47:10,680 Відавочна, што ніхто не робіць нічога гэты шкоднасны. 797 00:47:10,680 --> 00:47:15,780 >> Але тое, што ляскам сябе, быццам бы, што, калі я кампіляцыі Clang? 798 00:47:15,780 --> 00:47:20,900 Што рабіць, калі ў мяне ёсць кампілятар, які кампілюе Clang, які ўстаўляе ў Clang 799 00:47:20,900 --> 00:47:25,610 гэты спецыяльны хак, які кажа, усё ў парадку, калі я кампіляцыі Clang, то 800 00:47:25,610 --> 00:47:31,290 выкананы я атрымліваю павінны адмыслова шукаць ўнутры праграмы ўваходу ў сістэму і ўстаўкі 801 00:47:31,290 --> 00:47:34,230 гэты пароль, роўная роўных Дэйв з'яўляецца дзіўным? 802 00:47:34,230 --> 00:47:37,990 Таму памятайце, што ваш кампілятар сам павінен быць скампіляваны ў нейкі момант. 803 00:47:37,990 --> 00:47:42,810 Так што, калі тое, што вы выбіраеце для кампіляцыі Clang с, само па сабе з'яўляецца шкоднасным, то вы 804 00:47:42,810 --> 00:47:45,580 можа быць п'яным ўсю шлях ўніз лініі. 805 00:47:45,580 --> 00:47:49,630 >> Дык вось, у нас ёсць Кен Томпсан і Дэніс Рытчы. 806 00:47:49,630 --> 00:47:53,780 Так што гэта з'яўляецца знакавым фота. 807 00:47:53,780 --> 00:47:55,470 Дэніс Рытчы знаходзіцца справа. 808 00:47:55,470 --> 00:47:58,740 Ён з'яўляецца адным з асноўных - 809 00:47:58,740 --> 00:48:03,640 ў значнай ступені пісаў С. Такім чынам, вы можаце падзякаваць яго за гэтага класа. 810 00:48:03,640 --> 00:48:04,840 Кен Томсан знаходзіцца на левай баку. 811 00:48:04,840 --> 00:48:07,780 Два з іх у асноўным пісаў UNIX. 812 00:48:07,780 --> 00:48:10,140 Ну, яны былі асноўнымі прычынамі у UNIX. 813 00:48:10,140 --> 00:48:11,310 Былі некаторыя іншыя. 814 00:48:11,310 --> 00:48:16,240 Так Кен Томпсан, у нейкі момант, ён выйграе прэмію Цьюрынга. 815 00:48:16,240 --> 00:48:20,860 І прэмію Цьюрынга, я заўсёды чуў гэта спасылкі такім чынам, што гэта 816 00:48:20,860 --> 00:48:23,100 Нобелеўская прэмія інфарматыкі. 817 00:48:23,100 --> 00:48:27,500 >> Так на прэмію Цьюрынга, ён павінен даць сваёй прамове. 818 00:48:27,500 --> 00:48:31,790 І ён дае гэтаму вельмі знакамітай прамовы зараз, называецца Разважанні на даверы 819 00:48:31,790 --> 00:48:35,620 Давер, якое мы звязаны Каб на сайце курсу. 820 00:48:35,620 --> 00:48:41,670 І ў гэтай прамовы, па яго словах, усё ў парадку, таму я напісаў UNIX, і цяпер усё 821 00:48:41,670 --> 00:48:43,320 Вы людзі выкарыстоўваюць UNIX. 822 00:48:43,320 --> 00:48:46,960 Цяпер, памятаеце, што сёння Linux з'яўляецца прамы нашчадак UNIX. 823 00:48:46,960 --> 00:48:50,140 OS X непасрэдна выкарыстоўвае UNIX. 824 00:48:50,140 --> 00:48:53,810 Вокны не так шмат, але шмат ідэй былі ўзятыя з UNIX. 825 00:48:53,810 --> 00:48:59,220 >> Таму ён ідзе на сцэну і кажа: Усё ў парадку, я напісаў UNIX. 826 00:48:59,220 --> 00:49:03,940 І толькі так вы, хлопцы, ведаеце, я магчымасць увайсці ў кожны 827 00:49:03,940 --> 00:49:05,590 ні аднаго з вашых кампутараў. 828 00:49:05,590 --> 00:49:14,280 Так як я паклаў адзін з іх адмысловым, калі х роўная роўная Кен Томсан з'яўляецца дзіўным, 829 00:49:14,280 --> 00:49:16,350 Затым я дазволіў для ўваходу. 830 00:49:16,350 --> 00:49:18,370 Такім чынам, людзі, як, ну, Як ты гэта зрабіў? 831 00:49:18,370 --> 00:49:21,090 Мы глядзелі на праграмы ўваходу і нічога не ёсць. 832 00:49:21,090 --> 00:49:24,700 Ён, як, ну, я змяніў кампілятара , Каб увайсці ў праграму аўтарызацыі 833 00:49:24,700 --> 00:49:30,490 так што праграма Увайсці зараз прыйдзецца што х роўна роўна Кен Томпсан 834 00:49:30,490 --> 00:49:31,700 з'яўляецца дзіўным. 835 00:49:31,700 --> 00:49:33,120 >> І яны кажуць, добра, што гэта не так. 836 00:49:33,120 --> 00:49:35,740 Мы глядзім на кампілятарам, а кампілятар не мае лініі 837 00:49:35,740 --> 00:49:36,400 Код у гэтым родзе. 838 00:49:36,400 --> 00:49:40,540 Ён як, у парадку, але тое, што вы кампіляцыі кампілятар з? 839 00:49:40,540 --> 00:49:44,810 І яны думаюць, і ён, як, ну, Я той, хто даў табе кампілятар 840 00:49:44,810 --> 00:49:50,580 вы карыстаецеся для кампіляцыі кампілятар, таму вы компилируете кампілятар, што 841 00:49:50,580 --> 00:49:56,390 Сам шкоднасным і будзе ламаць праграмы ўваходу ў сістэму. 842 00:49:56,390 --> 00:49:59,360 Так у асноўным, у гэтай кропцы, ёсць няма, як вы маглі паглядзець на крыніцу 843 00:49:59,360 --> 00:50:02,450 Код праграмы ўваходу ў сістэму каб убачыць, што гэта няправільна. 844 00:50:02,450 --> 00:50:04,220 Вы не маглі нават глядзець у зыходны код кампілятара 845 00:50:04,220 --> 00:50:06,790 каб убачыць, што гэта няправільна. 846 00:50:06,790 --> 00:50:11,940 >> Вы павінны былі б глядзець на машыны Код, у падвоеным фармаце з 847 00:50:11,940 --> 00:50:16,760 складзены кампілятар, каб убачыць, пачакайце, гэта радкоў кода не павінна быць тут. 848 00:50:16,760 --> 00:50:22,130 Але Кен Томпсан узяў яшчэ адзін крок далей і сказаў, ну, ёсць 849 00:50:22,130 --> 00:50:25,980 гэтыя спецыяльныя праграмы, якія на самай справе дапамагчы вам чытаць двайковы праграм, 850 00:50:25,980 --> 00:50:29,340 і таму, калі хтосьці выкарыстаў гэтую праграму, каб чытаць двайковы, яны ўбачылі б гэтыя 851 00:50:29,340 --> 00:50:30,490 радкоў кода. 852 00:50:30,490 --> 00:50:34,020 Ён змяніў гэтыя праграмы, каб сказаць, усё Добра, калі вы глядзіце на 853 00:50:34,020 --> 00:50:38,460 кампілятар, не паказваюць менавіта гэты набор бінарных. 854 00:50:38,460 --> 00:50:42,830 >> Тады вы павінны прыняць гэта крок далей і ў прынцыпе, што можа мець 855 00:50:42,830 --> 00:50:46,210 прынятыя некалькі узроўняў абстракцыі, і ў нейкі момант, ніхто не на самай справе 856 00:50:46,210 --> 00:50:47,990 будзе правяраць. 857 00:50:47,990 --> 00:50:52,590 Такім чынам, мараль гэтай байкі такая, што ты не збіраюся пісаць 858 00:50:52,590 --> 00:50:54,340 Ляскам ў гэтым класе. 859 00:50:54,340 --> 00:50:57,020 Вы збіраецеся выкарыстоўваць ўзыходжанне Ляскам шмат у гэтым класе. 860 00:50:57,020 --> 00:51:00,490 Для ўсіх вы ведаеце, Clang з'яўляецца шкоднаснай праграма, якая сабатуе кожны 861 00:51:00,490 --> 00:51:03,520 адна праграма вы калі-небудзь кампіляцыі. 862 00:51:03,520 --> 00:51:08,206 І, каб пакінуць вас на што вельмі злавесным Адзначым, ўбачымся ў сераду. 863 00:51:08,206 --> 00:51:10,030 >> [Апладысменты] 864 00:51:10,030 --> 00:51:12,935 >> СПІКЕР 2: На наступным CS50. 865 00:51:12,935 --> 00:51:14,580 >> СПІКЕР 3: Не смей казаць, што. 866 00:51:14,580 --> 00:51:15,930 Вы можаце зрабіць гэта. 867 00:51:15,930 --> 00:51:19,440 Вы зрабілі гэта раней, вы можаце зрабіць гэта сёння, вы можаце зрабіць гэта заўтра. 868 00:51:19,440 --> 00:51:20,930 Вы рабілі гэта на працягу многіх гадоў. 869 00:51:20,930 --> 00:51:22,790 Проста пайсці туды і зрабіць гэта. 870 00:51:22,790 --> 00:51:24,310 Вы можаце зрабіць гэта. 871 00:51:24,310 --> 00:51:26,102 >> [Музыка гуляе]