1 00:00:00,000 --> 00:00:02,760 [Powered by Google Translate] [LINGGONG 5] 2 00:00:02,760 --> 00:00:04,760 [David J. Malan, Harvard University] 3 00:00:04,760 --> 00:00:11,990 [Ito ay CS50.] [CS50.TV] 4 00:00:11,990 --> 00:00:17,780 [Woman] Siya ang namamalagi; tungkol sa kung ano, hindi ko alam. 5 00:00:17,780 --> 00:00:20,300 [Man] Kaya kung ano ang namin malaman? 6 00:00:20,300 --> 00:00:24,120 [Woman] Na sa 9:15, Ray Santoya ay sa ATM. 7 00:00:24,120 --> 00:00:27,420 [Man] Kaya ang tanong ay, kung ano ang siya sa 9:16? 8 00:00:27,420 --> 00:00:29,980 [Woman] Shooting sa 9 mm sa isang bagay. 9 00:00:29,980 --> 00:00:31,900 Siguro nakita niya ang mamamaril na nakatago. 10 00:00:31,900 --> 00:00:34,000 [Man] O siya ay nagtatrabaho sa kanya. 11 00:00:34,000 --> 00:00:36,330 [Woman] Maghintay. Bumalik isa. 12 00:00:36,330 --> 00:00:38,330 [Man] Ano ang gagawin mong makita? 13 00:00:38,330 --> 00:00:44,520 [♫ Suspenseful musika ♫] 14 00:00:44,520 --> 00:00:48,320 [Woman] Dalhin kanyang mukha. Buong screen. 15 00:00:48,320 --> 00:00:51,230 [Man] Kanyang baso. >> May sumasalamin. 16 00:00:51,230 --> 00:01:00,810 [♫ Suspenseful musika ♫] 17 00:01:00,810 --> 00:01:03,580 [Man] Iyon ay baseball team ang Nuevita. Na ang kanilang logo. 18 00:01:03,580 --> 00:01:07,790 [Woman] At siya pakikipag-usap sa sinumang ang suot na jacket. 19 00:01:07,790 --> 00:01:13,730 >> [David Malan] Kaya, ito ay CS50 linggo 5, at ngayon kami sanhi ng pagkapahamak ng bit ng telebisyon at pelikula para sa iyo. 20 00:01:13,730 --> 00:01:16,170 Kaya sa tuwing ikaw ay nanonood ng isang palabas tulad ng isang ito dito, 21 00:01:16,170 --> 00:01:19,910 at ang mga cops sabihin "Maaari ninyo bang linisin na?" o "Pagandahin," 22 00:01:19,910 --> 00:01:21,900 walang paghusayin sa tunay na mundo. 23 00:01:21,900 --> 00:01:25,220 Sa katunayan, kung ano mo ba talagang makakuha ng isang maliit na bagay tulad nito. 24 00:01:25,220 --> 00:01:27,570 Nakuha ko na isa ng ang mga larawan ng kawani mula sa pahina. 25 00:01:27,570 --> 00:01:30,980 Ito ay isang programa na tinatawag na Photoshop. Ito ay 1 ng 2 Bowdens, 26 00:01:30,980 --> 00:01:36,300 1 ng 3 Bowdens aktwal na, ngayon, dahil mayroon kaming Mrs Bowden dito pati na rin, may Rob at Paul. 27 00:01:36,300 --> 00:01:41,950 Ngunit dito ay Rob sa screen, at kung namin ang pag-zoom in sa na sinag nagkaroon palagi niya sa kanyang mata, 28 00:01:41,950 --> 00:01:47,600 kung ano ang iyong aktwal na makita na kung ano ang nakikita mo ay kung ano ang makakakuha ka. 29 00:01:47,600 --> 00:01:51,690 Ito ay "pinahusay na," kaya "CSI" mayroon ito ng kaunti mali. 30 00:01:51,690 --> 00:01:55,190 Mayroong isa pang clip, kung maaari naming pumili sa "CSI" lamang ng kaunti na. 31 00:01:55,190 --> 00:01:58,500 Ito ay isang magaling na parirala sa tubos simula ngayon kung gusto mong 32 00:01:58,500 --> 00:02:10,280 tunog teknikal sa iyong mga kaibigan kapag, talagang, ka sinasabi ganap na walang. 33 00:02:10,280 --> 00:02:12,970 >> [Man] Para linggo ko na sinisiyasat ang taksista killer murders 34 00:02:12,970 --> 00:02:15,360 na may isang tiyak na mapanglaw pagkabighani. 35 00:02:15,360 --> 00:02:17,160 [Woman # 1] Ito ay sa real time. 36 00:02:17,160 --> 00:02:22,930 [Woman # 2] ako lilikha ng isang GUI interface gamit ang Visual Basic, tingnan kung Maaari ko bang subaybayan ang isang IP address. 37 00:02:22,930 --> 00:02:29,570 >> [Malan] Kaya audio ang ng sync bukod, paglikha ng isang GUI interface gamit ang Visual Basic 38 00:02:29,570 --> 00:02:31,820 upang subaybayan ang isang IP address ay kumpleto katarantaduhan. 39 00:02:31,820 --> 00:02:33,840 Mga araw na ito ay hindi mo gamitin ang Visual Basic, 40 00:02:33,840 --> 00:02:38,920 walang pangangailangan para sa isang GUI, at IP address ay isang technically tumpak na termino. 41 00:02:38,920 --> 00:02:41,730 Kaya abangan ang para sa mga ito, at isa ng aking mga paborito: 42 00:02:41,730 --> 00:02:45,070 Ang isang ito ng kaunti pa arcane, dahil kailangan mong malaman ng ibang wika. 43 00:02:45,070 --> 00:02:47,860 May isang wika na tinatawag na Layunin-C, na kung saan ay isang superset ng C. 44 00:02:47,860 --> 00:02:51,960 Na nangangahulugan na ito ay C kasama ang ilang mga karagdagang tampok, kasama ng mga ito object-oriented programming. 45 00:02:51,960 --> 00:02:55,070 At ito ay ang wika na Apple ay popularized para sa iOS programming. 46 00:02:55,070 --> 00:02:58,760 At kaya narito ang isang clip mula sa isang iba't ibang mga palabas sa kabuuan, mula sa "Numero," 47 00:02:58,760 --> 00:03:02,450 na kung ang iyong aktwal na tingnang mabuti sa iyong TiVo at i-pause sa tamang sandali, 48 00:03:02,450 --> 00:03:07,700 makikita mo na kung ano ang kanilang hinahanap sa ay hindi pa kung ano ang inilarawan. 49 00:03:07,700 --> 00:03:11,170 At hayaan mo akong subukan ang isang iba't ibang audio connector dito at makita kung hindi namin maaari 50 00:03:11,170 --> 00:03:13,780 panatilihin ang audio sa sync oras na ito. 51 00:03:13,780 --> 00:03:20,530 Ako magbibigay sa iyo ng "Numero." 52 00:03:20,530 --> 00:03:23,240 >> [Man # 1] Ito ay isang 32-bit na IPv4 address. 53 00:03:23,240 --> 00:03:38,930 [Man # 2] IP, na Internet. >> Pribadong network. Pribadong network ng Anita. 54 00:03:38,930 --> 00:03:43,810 [Malan] Okay. Ito ay Layunin-C, at ito ay para sa kulay programa ilang kid, 55 00:03:43,810 --> 00:03:51,140 tulad ng maaari mong marahil magpakilala mula sa pangalan ng variable doon. 56 00:03:51,140 --> 00:03:54,410 Kaya na, pagkatapos, ay "Numero." Kaya ngayon at sa linggong ito namin ipakilala 57 00:03:54,410 --> 00:03:57,740 kaunti ng ang mga mundo ng mga forensics at konteksto sa mga problema sa samakatuwid. 58 00:03:57,740 --> 00:04:00,590 Ngayon ay isang dinaglat na panayam dahil may isang espesyal na kaganapan sa dito 59 00:04:00,590 --> 00:04:05,530 Pagkatapos, kaya ipapakita namin tumagal ng isang silip, at manunudyo parehong mga mag-aaral at mga magulang magkamukha ngayon 60 00:04:05,530 --> 00:04:07,420 na may ilang ng mga bagay na sa abot-tanaw. 61 00:04:07,420 --> 00:04:12,240 Kasama ng mga ito, bilang ng Lunes, mayroon ka ng ilang higit pang mga kaklase. 62 00:04:12,240 --> 00:04:16,050 EdX, Harvard at MITs bagong online hakbangin para sa open courseware 63 00:04:16,050 --> 00:04:19,120 at higit pa, ay paglunsad sa Harvard ng campus sa Lunes. 64 00:04:19,120 --> 00:04:21,490 Na nangangahulugan ay Lunes ay mayroon ka - bilang ng huling count, 65 00:04:21,490 --> 00:04:26,210 86,000 karagdagang mga kaklase ay sumusunod na kasama CS50 ng aralin 66 00:04:26,210 --> 00:04:29,170 at seksyon at walkthroughs at problema sa set. 67 00:04:29,170 --> 00:04:32,350 At bilang bahagi ng, ikaw ay maging miyembro ng pampasinaya klase ng 68 00:04:32,350 --> 00:04:35,090 CS50 at ngayon CS50x. 69 00:04:35,090 --> 00:04:39,310 >> Bilang bahagi ng, ngayon, mapagtanto na magkakaroon ilang mga upsides bilang. 70 00:04:39,310 --> 00:04:43,790 Upang makakuha ng handa para sa, para sa napakalaking bilang ng mga mag-aaral, 71 00:04:43,790 --> 00:04:47,180 sumapat ito sa sabihin na kahit na mayroon kaming 108 TFs at Cas, 72 00:04:47,180 --> 00:04:50,790 hindi pa ang pinakamahusay na mag-aaral / guro ratio sa sandaling namin pindutin 80,000 iba pang mga mag-aaral. 73 00:04:50,790 --> 00:04:52,850 Kaya hindi namin ay pagpunta sa grading maraming problema nagtatakda nang manu-mano. 74 00:04:52,850 --> 00:04:55,920 Kaya ipinakilala linggo na ito sa hanay ng problema ay CS50 Check, 75 00:04:55,920 --> 00:04:58,450 na kung saan ay isang command line utility sa loob ng appliance 76 00:04:58,450 --> 00:05:01,200 na makakakuha ka ng isang beses mong i-update ang mga ito sa ibang pagkakataon ito weekend, 77 00:05:01,200 --> 00:05:03,200 at magagawa mong upang magpatakbo ng isang command, i-check ang 50, 78 00:05:03,200 --> 00:05:06,500 sa iyong sariling pset, at makikita mo makakuha ng ilang puna sa kung ang iyong programa ay 79 00:05:06,500 --> 00:05:11,160 tama o maling ayon sa iba't-ibang mga pagtutukoy ng disenyo na ibinigay namin. 80 00:05:11,160 --> 00:05:13,580 Kaya higit pa sa na at ang problema detalye ng hanay at 81 00:05:13,580 --> 00:05:17,240 ang mga CS50x kaklase ay gamit na ito pati na rin. 82 00:05:17,240 --> 00:05:19,230 >> Kaya problema set 4 ay ang lahat ng tungkol sa forensics. 83 00:05:19,230 --> 00:05:21,940 At piraso na ito ay inspirasyon sa pamamagitan ng ilang mga real-buhay na mga bagay-bagay, 84 00:05:21,940 --> 00:05:24,620 kung saan kapag ako ay sa graduate paaralan, interned ko para sa isang habang may 85 00:05:24,620 --> 00:05:28,650 sa Middlesex County District Attorney ng Office paggawa ng forensic trabaho 86 00:05:28,650 --> 00:05:31,650 sa kanilang mga lead na forensic imbestigador, at kung ano ito amounted sa 87 00:05:31,650 --> 00:05:35,260 , tingin ko nabanggit ko ang nakaraan ng ilang linggo, ang Mass Estado pulis o iba 88 00:05:35,260 --> 00:05:39,000 gagawin darating sa, sila drop off ang mga bagay tulad ng mga na hard drive at CD at tumbahin disk 89 00:05:39,000 --> 00:05:42,340 at katulad, at pagkatapos ay ang layunin ng opisina ng mga forensics ay upang alamin kung 90 00:05:42,340 --> 00:05:44,600 nagkaroon o ay hindi katibayan ng uri. 91 00:05:44,600 --> 00:05:48,010 Ito sa Espesyal na Yunit ng Pagsisiyasat, kaya ito ay pantanggapan krimen, 92 00:05:48,010 --> 00:05:52,350 ito ay mas troubling uri ng mga krimen, 93 00:05:52,350 --> 00:05:55,990 anumang bagay na kinasasangkutan ng ilang mga uri ng mga digital na media; lumiliko na hindi na maraming tao 94 00:05:55,990 --> 00:05:59,370 sumulat ng email na nagsasabing "ginawa ko ito." 95 00:05:59,370 --> 00:06:03,290 Kaya medyo madalas mga forensics paghahanap ay hindi i-lahat na magkano prutas, 96 00:06:03,290 --> 00:06:05,850 ngunit kung minsan mga tao ay sumulat ng mga naturang email. 97 00:06:05,850 --> 00:06:08,490 Kaya minsan ang mga pagsusumikap ay gagantimpalaan. 98 00:06:08,490 --> 00:06:14,420 >> Ngunit na humantong hanggang sa ito forensic pset, makikita namin nagpapakilala sa pset 4 isang bit ng graphics. 99 00:06:14,420 --> 00:06:18,260 Kaya malamang na gawin ang mga bagay para sa ipinagkaloob, mga JPEG, GIF at ang mga tulad ng mga araw na ito, 100 00:06:18,260 --> 00:06:21,640 ngunit kung sa tingin mo talagang tungkol dito, isang imahe, tulad ng mukha ng Rob, 101 00:06:21,640 --> 00:06:24,430 ma-modelo bilang isang pagkakasunud-sunod ng mga tuldok, o pixels. 102 00:06:24,430 --> 00:06:26,680 Ngayon, sa kaso ng Rob sa mukha, mayroong lahat ng mga uri ng mga kulay, 103 00:06:26,680 --> 00:06:29,940 at nagsimula kaming upang makita ang mga indibidwal na tuldok, otherwide kilala bilang pixel, 104 00:06:29,940 --> 00:06:31,610 sabay-sabay na sinimulan namin upang mag-zoom in. 105 00:06:31,610 --> 00:06:35,590 Ngunit kung pasimplehin namin ang mundo ng kaunti, at sabihin lamang na ito dito ay Rob 106 00:06:35,590 --> 00:06:40,560 sa itim at puti, na rin, upang kumatawan itim at puti namin lamang gamitin ang binary. 107 00:06:40,560 --> 00:06:44,960 At kung kami ay pagpunta sa gamitin ang binary, 1 o 0, maaari naming ipahayag ang parehong imahe 108 00:06:44,960 --> 00:06:51,970 ng nakangiting mukha Rob ang pattern na ito ng bit: 11000011 kumakatawan 109 00:06:51,970 --> 00:06:55,160 puti, puti, itim, itim, itim, itim, puti puti. 110 00:06:55,160 --> 00:06:59,290 At kaya ito ay hindi isang malaking hakbang, at pagkatapos, upang simulan ang pakikipag-usap tungkol sa makulay na litrato. 111 00:06:59,290 --> 00:07:01,920 Mga bagay na nais mong makita sa Facebook o sa isang digital camera, 112 00:07:01,920 --> 00:07:04,730 ngunit, tiyak, pagdating sa kulay, kailangan mo ng higit pang mga bit. 113 00:07:04,730 --> 00:07:08,470 At medyo karaniwang sa mundo ng mga larawan ay gamitin hindi 1-bit na kulay, 114 00:07:08,470 --> 00:07:12,730 bilang na ito ay nagmumungkahi, ngunit 24-bit na kulay, kung saan ang iyong aktwal na makakuha ng mga milyon-milyong mga kulay. 115 00:07:12,730 --> 00:07:15,430 Kaya bilang sa kaso kapag kami naka-zoom in sa Rob mata, 116 00:07:15,430 --> 00:07:19,270 na anumang bilang ng mga milyon-milyong ng iba't ibang makukulay na posibilidad. 117 00:07:19,270 --> 00:07:22,260 >> Kaya naming ipakilala ito sa hanay ng problema 4 pati na rin sa walkthrough, 118 00:07:22,260 --> 00:07:27,050 na ngayon sa 3:30 sa halip ng karaniwang 2:30 dahil sa Biyernes sa panayam dito. 119 00:07:27,050 --> 00:07:29,930 Ngunit ang video ay online, gaya ng dati, bukas. 120 00:07:29,930 --> 00:07:31,880 Din namin ipakilala sa iyo sa isa pang format ng file. 121 00:07:31,880 --> 00:07:34,150 Kaya ito ay sadyang ginawa upang hitsura intimidating sa unang, 122 00:07:34,150 --> 00:07:38,980 ngunit ito ay ilan lang dokumentasyon para sa isang C struct. 123 00:07:38,980 --> 00:07:42,280 Ito lumiliko out na ang Microsoft, taon na ang nakakaraan, nakatulong sa magpabantog ang format na ito, 124 00:07:42,280 --> 00:07:46,630 na tinatawag na ang bitmap file format, BMP, at ito ay isang napaka-simpleng, 125 00:07:46,630 --> 00:07:50,390 makulay na graphical na format ng file na ginamit para sa pa ng ilang oras 126 00:07:50,390 --> 00:07:53,640 at minsan pa rin para sa mga wallpaper sa desktop. 127 00:07:53,640 --> 00:07:57,410 Kung sa tingin mo pabalik sa Windows XP at ang mga rolling burol at asul na kalangitan, 128 00:07:57,410 --> 00:08:00,660 na ay karaniwang isang BMP, o bitmap imahe, at bitmaps 129 00:08:00,660 --> 00:08:03,340 masaya para sa atin dahil mayroon sila ng kaunti pang pagiging kumplikado. 130 00:08:03,340 --> 00:08:05,640 Ito ay hindi lubos na simple bilang ang grid na ito ng 0 at 1 ay; 131 00:08:05,640 --> 00:08:10,680 sa halip, mayroon kang mga bagay tulad ng isang header sa simula ng isang file. 132 00:08:10,680 --> 00:08:15,520 Kaya sa ibang salita, sa loob ng isang file na. Bmp ay isang buong grupo ng 0 at 1 ay, 133 00:08:15,520 --> 00:08:18,070 ngunit may ilang karagdagang 0 at 1 doon. 134 00:08:18,070 --> 00:08:21,450 At ito ay lumiliko out na ang malamang nagsagawa kami para sa ipinagkaloob para sa taon, 135 00:08:21,450 --> 00:08:27,040 format ng file tulad ng. doc o. xls o. mp3 o. mp4, 136 00:08:27,040 --> 00:08:29,910 anuman ang format ng file na hindi ka pamilyar sa. 137 00:08:29,910 --> 00:08:31,900 Well, kung ano ang kahit ibig sabihin ay isang format ng file? 138 00:08:31,900 --> 00:08:35,740 Dahil sa pagtatapos ng araw, ang lahat ng mga file na ito ginagamit namin ay may lamang 0 at 1 139 00:08:35,740 --> 00:08:39,950 at siguro mga 0 at 1 kumakatawan a, b, c, sa pamamagitan ng ASCII o ang tulad ng, 140 00:08:39,950 --> 00:08:42,030 ngunit sa pamamagitan ng pagtatapos ng araw, ito lang 0 at 1 ay. 141 00:08:42,030 --> 00:08:45,300 >> Kaya mga tao lamang paminsan-minsan magpasya upang maglubid ng isang bagong format ng file 142 00:08:45,300 --> 00:08:49,420 kung saan sila alisunod sa pamantayan kung ano ang talagang ibig sabihin ng mga pattern ng bits. 143 00:08:49,420 --> 00:08:52,790 At sa kasong ito dito, ang mga tao na dinisenyo sa bitmap format ng file 144 00:08:52,790 --> 00:08:58,260 sinabi na sa unang byte sa isang bitmap na file, tulad ng naitala sa pamamagitan ng offset 0, doon, 145 00:08:58,260 --> 00:09:02,320 mayroong ilang cryptically na pinangalanang variable na tinatawag na bfType, 146 00:09:02,320 --> 00:09:06,510 kung saan nakatayo lamang para sa bitmap uri ng file; kung anong uri ng bitmap file na ito ay. 147 00:09:06,510 --> 00:09:10,780 Maaari mong magpakilala, marahil, mula sa pangalawang hilera na offset 2, byte numero 2, 148 00:09:10,780 --> 00:09:15,980 may isang pattern ng 0 at 1 na kumakatawan sa kung ano ang? 149 00:09:15,980 --> 00:09:18,320 Ang laki ng isang bagay, at ito ay pupunta sa mula doon. 150 00:09:18,320 --> 00:09:20,660 Kaya sa problema set 4, makikita ka lumakad sa pamamagitan ng ilan sa mga bagay na ito. 151 00:09:20,660 --> 00:09:24,480 >> Hindi namin magtatapos aalaga tungkol sa lahat ng mga ito, ngunit mapansin nagsisimula upang makakuha ng kawili-wiling 152 00:09:24,480 --> 00:09:30,780 sa paligid ng linya o byte 54, rgbtBlue, Green at Red. 153 00:09:30,780 --> 00:09:35,280 Kung sakaling iyong narinig ang acronym RGB, pula berde asul, ito ay isang reference na iyon. 154 00:09:35,280 --> 00:09:37,840 Dahil ito ay lumiliko ang maaari mong ipinta ang lahat ng mga kulay ng bahaghari 155 00:09:37,840 --> 00:09:41,580 may ilang mga kumbinasyon ng mga pula at bughaw at berde. 156 00:09:41,580 --> 00:09:46,560 At, sa katunayan, ang mga magulang sa kuwarto ay maaaring isipin ang ilan sa pinakamaagang Projector. 157 00:09:46,560 --> 00:09:49,360 Mga araw na ito, mo lamang makita ang 1 maliwanag na ilaw paparating ng lens. 158 00:09:49,360 --> 00:09:52,870 Subalit bumalik sa araw, ay ang pulang lens, ang mga asul na lens, at ang berde lens 159 00:09:52,870 --> 00:09:56,620 at kasama nila naglalayong sa screen at nabuo ang isang makulay na larawan. 160 00:09:56,620 --> 00:09:59,590 At medyo madalas gitnang paaralan at mataas na paaralan ay may mga lens 161 00:09:59,590 --> 00:10:02,680 kailanman-kaya-bahagyang nakatagilid, kaya ikaw ay ang uri ng makakita ng mga double o triple larawan, 162 00:10:02,680 --> 00:10:07,500 ngunit ang ideya. Ikaw ay may pula at berde at bughaw na ilaw pagpipinta ng isang larawan. 163 00:10:07,500 --> 00:10:09,570 At ang parehong prinsipyo ay ginagamit sa mga computer. 164 00:10:09,570 --> 00:10:12,000 >> Kaya kabilang sa mga hamon, pagkatapos, para sa iyo sa problema magtakda ng 4 165 00:10:12,000 --> 00:10:16,080 ang ilang mga bagay, ay isa sa aktwal na baguhin ang laki ng isang imahe. 166 00:10:16,080 --> 00:10:18,050 Upang kumuha sa isang pattern ng 0 at 1 ay, 167 00:10:18,050 --> 00:10:22,840 malaman kung aling chunks ng 0 at 1 ay kumakatawan sa kung ano ang sa isang istraktura tulad nito, 168 00:10:22,840 --> 00:10:26,800 at pagkatapos malaman kung paano ginagaya ang mga pixels: pula, blues, sa paglalaro ng golf 169 00:10:26,800 --> 00:10:32,460 sa loob nang sa gayon ay kapag ang isang larawan ay ganito ang hitsura simula, maaaring magmukhang ganito sa halip pagkatapos na. 170 00:10:32,460 --> 00:10:35,590 Kabilang sa iba pang mga hamon,, na makikita mo ay ipinasa 171 00:10:35,590 --> 00:10:38,900 forensic imahe ng isang aktwal na file mula sa isang digital camera 172 00:10:38,900 --> 00:10:42,410 at sa camera na, sa sandaling unang panahon, ay isang buong grupo ng mga larawan. 173 00:10:42,410 --> 00:10:47,030 Ang problema, hindi namin sinasadyang mabura o may larawan Nasira sa paanuman. 174 00:10:47,030 --> 00:10:51,040 Masamang mangyayari sa mga digital camera, at kaya mabilis namin kinopya ang lahat ng 0 at 1 175 00:10:51,040 --> 00:10:55,410 off ng card na iyon para sa iyo, naka-save na ang lahat ng ito sa 1 malaking file, at pagkatapos ay makikita namin ipasa ang mga ito sa iyo 176 00:10:55,410 --> 00:11:00,000 sa problema ang 4 sa gayon na maaari mong magsulat ng isang programa sa C na upang mabawi 177 00:11:00,000 --> 00:11:02,660 lahat ng mga JPEG na, perpektong. 178 00:11:02,660 --> 00:11:06,280 At ito ay lumiliko out na mga JPEG, kahit na nasa medyo ng isang complex na format ng file, 179 00:11:06,280 --> 00:11:09,580 sila magkano ang mas kumplikado kaysa ito nakangiting mukha dito. 180 00:11:09,580 --> 00:11:14,320 Ito lumiliko out na bawat JPEG ay nagsisimula na may parehong pattern ng 0 at 1 ay. 181 00:11:14,320 --> 00:11:18,820 Kaya gamit habang loop o para sa loop o katulad, 182 00:11:18,820 --> 00:11:22,350 maaari mong umulit sa ibabaw ng lahat ng 0 at 1 sa forensic imahe 183 00:11:22,350 --> 00:11:26,670 at sa bawat oras na makita mo ang espesyal na pattern na tinukoy sa detalye ng set ang problema, 184 00:11:26,670 --> 00:11:29,770 maaari mong ipagpalagay, 'Oh, dito ay, na may napakataas na posibilidad, 185 00:11:29,770 --> 00:11:33,520 ang simula ng isang JPEG, 'at sa lalong madaling mahanap ka ng parehong pattern, 186 00:11:33,520 --> 00:11:36,050 ilang bilang ng mga bytes o kilobytes o megabytes sa ibang pagkakataon, 187 00:11:36,050 --> 00:11:40,550 maaari mong ipagpalagay, 'Ooh! Narito ang isang pangalawang JPEG, ang mga larawan na kinuha ko pagkatapos ng unang. 188 00:11:40,550 --> 00:11:44,720 Hayaan akong itigil ang pagbabasa na unang file, simulan ang pagsusulat ang bagong isa. ' 189 00:11:44,720 --> 00:11:49,980 At ang output ng iyong programa para pset 4 ay pagpunta sa bilang maraming bilang 50 mga JPEG. 190 00:11:49,980 --> 00:11:52,400 At kung hindi ito 50 mga JPEG, mayroon kang isang bit ng isang loop. 191 00:11:52,400 --> 00:11:55,580 Kung mayroon ka ng isang walang-katapusang bilang ng mga JPEG, mayroon ka ng isang walang-katapusang loop. 192 00:11:55,580 --> 00:11:58,280 Kaya na,, ay lubos na isang karaniwang kaso. 193 00:11:58,280 --> 00:12:00,280 Iyon ay kung ano ang sa abot-tanaw. 194 00:12:00,280 --> 00:12:03,740 >> Pagsusulit 0, sa likod sa amin. Napagtanto, bawat aking email, na walang paltos may mga tao 195 00:12:03,740 --> 00:12:06,820 na parehong masaya, uri ng neutral, at malungkot sa paligid pagsusulit 0 oras. 196 00:12:06,820 --> 00:12:10,160 At mangyaring huwag makipag-ugnay sa akin, ang mga TFs sa ulo, Zamyla, ang iyong sariling tf 197 00:12:10,160 --> 00:12:14,120 o isa ng Cas na alam mo kung nais mong upang talakayin kung paano ang mga bagay nagpunta. 198 00:12:14,120 --> 00:12:16,460 >> Kaya sa mapabilib ang mga magulang dito sa kuwarto, 199 00:12:16,460 --> 00:12:23,990 ano ang CS50 library? Magandang trabaho. 200 00:12:23,990 --> 00:12:32,280 Ano ang CS50 library? Oo? [Estudyante sagot, hindi maintindihan] 201 00:12:32,280 --> 00:12:35,730 >> Okay, mabuti. Kaya ito isang prewritten na hanay ng mga code namin, ang kawani, sumulat si, 202 00:12:35,730 --> 00:12:38,460 na ibinigay namin sa iyo, upang magbigay ng ilang mga karaniwang pag-andar. 203 00:12:38,460 --> 00:12:42,290 Bagay-bagay na bang makakuha ako ng isang string; makakuha ako ng isang int, ang lahat ng mga pagpapaandar na nakalista dito. 204 00:12:42,290 --> 00:12:45,260 Simula ngayon, sisimulan namin talagang gawin ang mga gulong ng pagsasanay. 205 00:12:45,260 --> 00:12:48,230 Kaya kami ay pagpunta sa magsimula sa tumagal ang layo ng "string" mula sa iyo, 206 00:12:48,230 --> 00:12:52,790 kung saan, manariwa sa diwa, ay isang kasingkahulugan lamang para sa kung ano ang aktwal na mga uri ng data? magpasinda *. 207 00:12:52,790 --> 00:12:57,020 Kaya para sa mga magulang, na marahil - na magandang, kaya magpasinda * magpapadala kami magsimulang makita ang 208 00:12:57,020 --> 00:13:00,810 sa screen ang lahat ng higit pa namin alisin ang "string" mula sa aming bokabularyo, 209 00:13:00,810 --> 00:13:02,760 hindi bababa sa pagdating sa aktwal na pagsusulat code. 210 00:13:02,760 --> 00:13:06,240 Gayundin, ititigil namin gamit ang ilan sa mga function ng mas maraming, 211 00:13:06,240 --> 00:13:08,390 dahil ang aming mga programa ay pagpunta upang makakuha ng mas sopistikadong 212 00:13:08,390 --> 00:13:11,370 kaysa magsulat lamang ng mga programa na umupo doon na may isang prompt kumikislap, 213 00:13:11,370 --> 00:13:13,580 naghihintay para sa user i-type ng isang bagay. 214 00:13:13,580 --> 00:13:15,220 Makakakuha ka ng iyong mga input mula sa ibang lugar. 215 00:13:15,220 --> 00:13:18,720 Halimbawa, makakakuha ka ng mga ito mula sa isang serye ng mga bits sa lokal na hard drive. 216 00:13:18,720 --> 00:13:23,340 Sa halip makakuha ng mga ito sa hinaharap mula sa isang koneksyon ng network, ang ilang mga website sa isang lugar. 217 00:13:23,340 --> 00:13:27,460 Kaya sabihin alisan ng balat pabalik ang layer na ito para sa unang pagkakataon, at makuha ang CS50 appliance 218 00:13:27,460 --> 00:13:32,300 at ang file na ito na tinatawag na CS50.h, kung saan mo ang matalim kabilang ang para sa linggo. 219 00:13:32,300 --> 00:13:34,380 >> Ngunit ipaalam sa aktwal na makita kung ano ang sa loob ng mga ito. 220 00:13:34,380 --> 00:13:38,250 Kaya ang tuktok ng file sa asul ay lamang ng buong bungkos ng mga komento, 221 00:13:38,250 --> 00:13:41,340 warranty impormasyon at paglilisensya. Ito ay uri ng karaniwang paradaym 222 00:13:41,340 --> 00:13:44,600 sa software, dahil ng maraming ng software mga araw na ito ay kung ano ang tinatawag na "open source", 223 00:13:44,600 --> 00:13:46,940 na nangangahulugan na may nakasulat na code 224 00:13:46,940 --> 00:13:50,060 at ginawa ito malayang magagamit, hindi lamang upang mapatakbo at upang gamitin, 225 00:13:50,060 --> 00:13:53,660 pero sa totoo ay basahin at baguhin at isama sa iyong sariling. 226 00:13:53,660 --> 00:13:55,790 Kaya na kung ano na ginagamit mo, open source software, 227 00:13:55,790 --> 00:13:58,030 kahit na sa napakaliit na paraan. 228 00:13:58,030 --> 00:14:01,860 Kung mag-scroll ko pababa nakaraan ng mga komento, bagaman, makikita namin simulan upang makita ang ilang mga mas pamilyar na mga bagay. 229 00:14:01,860 --> 00:14:08,090 Kaya mapapansin sa tuktok dito, na ang CS50.h file ay nagsasama ng isang buong grupo ng mga file ng header. 230 00:14:08,090 --> 00:14:11,160 Ngayon, karamihan sa mga ito hindi namin nakita bago, ngunit ang isa ay 231 00:14:11,160 --> 00:14:15,640 pamilyar, kung alin sa mga ito namin nakikita, kahit na sa maikling, kaya sa ngayon? 232 00:14:15,640 --> 00:14:18,720 Oo, standard na mga aklatan. Stdlib.h may malloc, 233 00:14:18,720 --> 00:14:21,590 kaya sabay-sabay na sinimulan namin ang pakikipag-usap tungkol sa dynamic memory paglalaan, 234 00:14:21,590 --> 00:14:24,960 na gagamitin namin bumalik sa susunod na linggo pati na rin, na sinimulan namin kasama ang file na iyon. 235 00:14:24,960 --> 00:14:29,660 Ito lumiliko ang bool at tunay at huwad na hindi aktwal na umiiral sa C, per se, 236 00:14:29,660 --> 00:14:32,460 maliban kung isama mo ang file na ito dito. 237 00:14:32,460 --> 00:14:35,770 Kaya't hindi kami, para sa mga linggo, na kabilang ang standard bool.h 238 00:14:35,770 --> 00:14:39,020 sa gayon ay maaari mong gamitin ang paniwala ng bool, true o false. 239 00:14:39,020 --> 00:14:41,830 Wala ang, gusto mo upang pag-uri-uriin ng mga pekeng ito at gamitin ang isang int 240 00:14:41,830 --> 00:14:45,920 at mang ipinapalagay na ang 0 ay mali at 1 ay totoo. 241 00:14:45,920 --> 00:14:49,980 >> Ngayon, kung namin mag-scroll pababa sa karagdagang, narito ang aming kahulugan ng isang string. 242 00:14:49,980 --> 00:14:54,820 Ito lumiliko out, bilang namin ang sinabi bago, na kung saan ito ay ang * ay hindi talagang mahalaga. 243 00:14:54,820 --> 00:14:56,750 Maaari ka ring magkaroon ng espasyo sa buong. 244 00:14:56,750 --> 00:15:01,550 Namin, ang semestre na ito, ay nagpo-promote ang mga ito bilang ito upang gumawa ng malinaw na ang * ay may sa gawin sa ang uri. 245 00:15:01,550 --> 00:15:05,370 Ngunit Napagtanto, tulad ng karaniwan, kung hindi isang maliit na mas karaniwang, ay ilagay ang mga ito doon 246 00:15:05,370 --> 00:15:07,480 ngunit pagtakbo nito ang parehong bagay. 247 00:15:07,480 --> 00:15:11,070 Ngunit ngayon, kung basahin namin ang karagdagang, sabihin tingnan sa halimbawa, GetInt, 248 00:15:11,070 --> 00:15:15,350 dahil ginamit namin na, marahil, bago ang anumang bagay na ito semestre. 249 00:15:15,350 --> 00:15:19,620 At dito ay GetInt. Ito ay kung ano ang? 250 00:15:19,620 --> 00:15:24,650 Ito ay ang prototype. Kaya madalas, namin ilagay modelo sa tops ng aming c file, 251 00:15:24,650 --> 00:15:28,190 ngunit maaari mo ring ilagay ang mga modelo sa header file,. h file, 252 00:15:28,190 --> 00:15:32,110 tulad ng isang ito dito, kaya na kapag sumulat kang ilang mga function 253 00:15:32,110 --> 00:15:36,790 na nais mong iba pang mga tao magagawang gamitin, na eksakto ang kaso may CS50 library, 254 00:15:36,790 --> 00:15:40,900 hindi lamang ipatupad ang iyong mga function sa isang bagay tulad ng CS50.c, 255 00:15:40,900 --> 00:15:46,720 mo ring ilagay ang modelo hindi sa tuktok ng file na iyon, ngunit sa tuktok ng isang file ng header, 256 00:15:46,720 --> 00:15:50,810 pagkatapos ang file na header ano ang mga kaibigan at kasamahan ang, 257 00:15:50,810 --> 00:15:52,800 may matulis isama sa kanilang sariling mga code. 258 00:15:52,800 --> 00:15:55,440 Kaya lahat oras na ito na kabilang ang lahat ng mga modelo 259 00:15:55,440 --> 00:15:59,870 epektibo sa tuktok ng iyong mga file, ngunit sa pamamagitan ng paraan ng ito matalim ang mekanismo 260 00:15:59,870 --> 00:16:03,320 na mahalagang mga kopya at pastes ang file na ito sa iyong sariling. 261 00:16:03,320 --> 00:16:06,400 Ngayon, narito ang ilang medyo detalyadong dokumentasyon. 262 00:16:06,400 --> 00:16:08,880 >> Namin na medyo mas kinuha para sa ipinagkaloob na GetInt nakakakuha ng isang int, 263 00:16:08,880 --> 00:16:10,740 ngunit ito lumiliko out ang ilang sulok kaso, i-right? 264 00:16:10,740 --> 00:16:14,320 Paano kung ang mga uri ng user sa isang numero na paraan masyadong malaki? 265 00:16:14,320 --> 00:16:17,350 Isang quintillion, na lamang ay hindi maaaring magkasya sa loob ng isang int? 266 00:16:17,350 --> 00:16:21,180 Ano ang inaasahang pag-uugali? Well, may perpektong, predictable. 267 00:16:21,180 --> 00:16:23,460 Kaya sa kasong ito, kung aktwal mong basahin ang fine na naka-print, 268 00:16:23,460 --> 00:16:27,850 makikita mo na kung linya ay hindi maaaring basahin, ito INT_MAX babalik. 269 00:16:27,850 --> 00:16:30,800 Hindi kailanman na-uusapang namin tungkol dito, ngunit batay sa capitalization, 270 00:16:30,800 --> 00:16:33,030 ano ito, marahil? 271 00:16:33,030 --> 00:16:36,610 Ito ay isang pare-pareho, kaya ang ilang espesyal na pare-pareho na marahil ipinahayag 272 00:16:36,610 --> 00:16:39,460 sa isa sa mga file ng header na hanggang mas mataas sa file, 273 00:16:39,460 --> 00:16:43,400 at INT_MAX ay marahil isang bagay tulad ng, halos, 2 bilyong. 274 00:16:43,400 --> 00:16:48,160 Ang ideya sa pagiging na dahil kailangan namin sa paanuman magpahiwatig na may isang bagay nangyaring mali, 275 00:16:48,160 --> 00:16:51,090 namin, oo, 4 bilyong numero sa aming pagtatapon, 276 00:16:51,090 --> 00:16:53,980 negatibong 2 bilyong sa hanggang sa 2 bilyong, bigyan o. 277 00:16:53,980 --> 00:16:58,030 Well, kung ano ang karaniwan sa programming nakawin mo lang ang isa sa mga numero. 278 00:16:58,030 --> 00:17:02,250 Siguro 0, siguro 2 bilyong, maaaring negatibong 2 bilyong. 279 00:17:02,250 --> 00:17:06,720 Kaya ang gagastusin mo ang isa sa iyong mga posibleng halaga upang maaari kang mangako sa mundo 280 00:17:06,720 --> 00:17:10,089 na kung ang isang bagay napupunta mali, ako ay ibalik ito sobrang-malaking halaga. 281 00:17:10,089 --> 00:17:13,329 Ngunit hindi mo nais na ng user ang pag-type ng misteriyoso tulad ng "2, 3, 4 ..." 282 00:17:13,329 --> 00:17:17,079 talagang malaking bilang, kung saan ka ng tuntuning panlahat sa halip bilang isang pare-pareho. 283 00:17:17,079 --> 00:17:19,380 Kaya talaga, kung ikaw ay pagiging anal sa nakalipas na ilang linggo, 284 00:17:19,380 --> 00:17:23,800 anumang oras tumawag ka GetInt, dapat mong na-check na may isang kung kondisyon. 285 00:17:23,800 --> 00:17:27,109 Ba ang uri ng user sa INT_MAX, o higit na partikular, 286 00:17:27,109 --> 00:17:29,900 ginawa GetInt return INT_MAX? Dahil kung ito ay ginawa, 287 00:17:29,900 --> 00:17:35,140 na aktwal na nangangahulugan na hindi nila type ito; may nangyaring mali sa kasong ito. 288 00:17:35,140 --> 00:17:38,970 Kaya ito ay kung ano ang karaniwang kilala bilang isang halaga ng "bantay", kung saan ay nangangahulugan lamang espesyal. 289 00:17:38,970 --> 00:17:41,020 >> Well, sabihin na ngayong i-in sa. File c. 290 00:17:41,020 --> 00:17:44,500 Ang C file ay umiiral sa appliance para sa ilang oras, 291 00:17:44,500 --> 00:17:47,540 at, sa katunayan, appliance ay may itong precompiled para sa iyo 292 00:17:47,540 --> 00:17:49,720 sa na bagay na namin na tinatawag na "code ng bagay," 293 00:17:49,720 --> 00:17:52,940 ngunit ito lamang ay hindi mahalaga sa iyo kung saan ito ay dahil alam ng system ang, 294 00:17:52,940 --> 00:17:54,780 sa kasong ito, kung saan ito ay, ang appliance. 295 00:17:54,780 --> 00:18:00,620 Ngunit sabihin mag-scroll pababa ngayon upang GetInt, at makita kung paano GetInt ay nagtatrabaho lahat oras na ito. 296 00:18:00,620 --> 00:18:02,380 Kaya dito mayroon kami ng mga katulad na mga komento mula sa bago. 297 00:18:02,380 --> 00:18:04,930 Hayaan akong mag-zoom in sa lamang ang bahagi code, 298 00:18:04,930 --> 00:18:07,410 at kung ano ang mayroon kami para sa GetInt ay ang mga sumusunod. 299 00:18:07,410 --> 00:18:12,770 Ito ay tumatagal ng walang input at ito ay nagbabalik ng isang int, habang (tama), kaya kami ay may isang sinadya na walang-katapusang loop 300 00:18:12,770 --> 00:18:16,560 pero, siguro, makikita namin masira ng ito sa paanuman, o bumalik mula sa loob ng. 301 00:18:16,560 --> 00:18:19,890 Kaya sabihin makita kung paano ito gumagana. Well, mukhang namin na ang paggamit ng GetString 302 00:18:19,890 --> 00:18:22,550 sa unang linya sa loob ng loop, 166. 303 00:18:22,550 --> 00:18:25,320 Ito ay mahusay na kasanayan na ngayon dahil sa ilalim kung ano pangyayari 304 00:18:25,320 --> 00:18:30,820 maaaring GetString ibalik ang espesyal na keyword, null? 305 00:18:30,820 --> 00:18:38,460 Kung ang isang bagay napupunta mali. Ano ang maaaring pumunta mali kapag tumawag ka ng isang bagay tulad ng GetString? 306 00:18:38,460 --> 00:18:42,550 Oo? [Estudyante sagot, hindi maintindihan] >> Oo. Kaya marahil malloc nabigo. 307 00:18:42,550 --> 00:18:45,310 Sa isang lugar sa ilalim ng hood ng GetString ay pagtawag malloc, 308 00:18:45,310 --> 00:18:48,210 na allocates memorya, na kung saan ay nagbibigay-daan sa computer store 309 00:18:48,210 --> 00:18:50,950 lahat ng ang mga character na gumagamit ng mga uri sa keyboard. 310 00:18:50,950 --> 00:18:53,270 At ipagpalagay ang user ay may isang buong maraming libreng oras 311 00:18:53,270 --> 00:18:56,470 at nai-type nang higit pa, halimbawa, kaysa sa 2 bilyong mga character. 312 00:18:56,470 --> 00:18:59,600 Higit pang mga character kaysa sa computer kahit may RAM. 313 00:18:59,600 --> 00:19:02,350 Well, GetString upang magpahiwatig na ang sa iyo, 314 00:19:02,350 --> 00:19:05,650 kahit na ito ay isang napakabilis, sobrang bihira na sulok ng kaso. 315 00:19:05,650 --> 00:19:08,490 Ito ay sa paanuman magagawang upang mahawakan ito, at kaya GetString, 316 00:19:08,490 --> 00:19:11,850 kung namin bumalik at basahin ang mga dokumentasyon, ay, sa katunayan, bumalik null. 317 00:19:11,850 --> 00:19:16,150 Ngayon kung ang GetString nabigo sa pamamagitan ng pagbalik null, GetInt ay pagpunta sa mabibigo 318 00:19:16,150 --> 00:19:19,370 sa pamamagitan ng pagbalik INT_MAX, bilang isang tanod. 319 00:19:19,370 --> 00:19:22,650 Ito ang lang tao convention. Ang tanging paraan na nais mong malaman na ito ay ang kaso 320 00:19:22,650 --> 00:19:24,840 sa pamamagitan ng pagbabasa ang dokumentasyon. 321 00:19:24,840 --> 00:19:28,200 Kaya sabihin mag-scroll pababa sa kung saan ang int ay talagang GotInt. 322 00:19:28,200 --> 00:19:34,220 >> Kaya kung mag-scroll ko ng kaunti pa, sa line 170 namin ng komento sa itaas mga linya. 323 00:19:34,220 --> 00:19:38,470 Kaya ipinapahayag namin, sa 172, isang int n at magpasinda c, at pagkatapos ay ang bagong function na 324 00:19:38,470 --> 00:19:41,870 kung saan ang ilan sa inyo ay stumbled sa buong bago, ngunit sscanf. 325 00:19:41,870 --> 00:19:44,190 Ito ay nakatayo para sa string-scan ng f. 326 00:19:44,190 --> 00:19:48,580 Sa ibang salita, bigyan ako ng string at ko i-scan ang mga ito para sa mga piraso ng impormasyon ng interes. 327 00:19:48,580 --> 00:19:53,820 Kaya kung ano ang na ibig sabihin nito? Well, ipagpalagay na type ko sa, literal, 1 2 3 sa keyboard, 328 00:19:53,820 --> 00:19:59,730 at pagkatapos ay pindutin ang enter. Ano ang data uri ng 1 2 3 kapag ibinalik ng GetString? 329 00:19:59,730 --> 00:20:05,010 Ito ay malinaw naman isang string, i-right? Nakatanggap ako ng string, kaya 1 2 3 talaga "1 2 3" 330 00:20:05,010 --> 00:20:07,260 gamit ang \ 0 sa pagtatapos nito. Na ay hindi isang int. 331 00:20:07,260 --> 00:20:10,420 Iyon ay hindi isang numero. Mukhang isang numero ngunit ito ay hindi tunay na. 332 00:20:10,420 --> 00:20:14,680 Kaya kung ano ang GetInt gawin? Upang i-scan na string kaliwa papuntang kanan, 333 00:20:14,680 --> 00:20:19,010 1 2 3 \ 0, at sa paanuman convert ito sa isang aktwal na integer. 334 00:20:19,010 --> 00:20:21,010 Ngayon, maaari mong malaman kung paano gawin ito. 335 00:20:21,010 --> 00:20:24,240 Kung sa tingin mo pabalik sa pset 2, baka nakuha ng kaunti kumportableng 336 00:20:24,240 --> 00:20:26,810 may Caesar o vigenere upang maaari mong umulit sa loob ng isang string, 337 00:20:26,810 --> 00:20:29,800 maaari mong i-convert ng mga karakter sa mga ints may pick. Na ang isang buong maraming trabaho. 338 00:20:29,800 --> 00:20:32,800 Bakit hindi tumawag sa isang function tulad sscanf na ginagawa na para sa iyo? 339 00:20:32,800 --> 00:20:37,520 Kaya sscanf Inaasahan ng isang argument, sa kasong ito na tinatawag na linya, na isang string. 340 00:20:37,520 --> 00:20:41,310 Pagkatapos mong tukuyin, sa mga panipi, na halos kapareho sa printf, 341 00:20:41,310 --> 00:20:44,960 ano ang gagawin mong asahan na makita sa ang string na ito? 342 00:20:44,960 --> 00:20:52,980 Ano ako sinasabi dito ay, inaasahan ko upang makita ang isang decimal na numero at maaaring isang character. 343 00:20:52,980 --> 00:20:54,990 At kami na makita kung bakit ito ang kaso sa sandali lamang. 344 00:20:54,990 --> 00:20:58,440 Ito lumiliko out na ang pagtatanda na ito ay nakapagpapaalaala na ngayon ng mga bagay-bagay 345 00:20:58,440 --> 00:21:00,840 na sinimulan namin ang pakikipag-usap tungkol sa higit lamang sa isang linggo ang nakalipas. 346 00:21:00,840 --> 00:21:05,430 >> Ano ang & n at & c na ginagawa para sa amin dito? [Estudyante sagot, hindi maintindihan] 347 00:21:05,430 --> 00:21:07,610 >> Oo. Ito ay nagbibigay sa akin ang address ng n at address ng c. 348 00:21:07,610 --> 00:21:10,440 Ngayon, kung bakit ay na mahalaga? Well, alam mo na may mga function sa C 349 00:21:10,440 --> 00:21:13,440 maaari mong laging nagbabalik ng halaga o walang halaga sa lahat. 350 00:21:13,440 --> 00:21:16,630 Maaari mong ibalik ang isang int, isang string, Float, pansamantalang trabaho, anumang. 351 00:21:16,630 --> 00:21:21,150 O maaari kang bumalik walang bisa, ngunit maaari mo lamang ibalik 1 bagay maximally. 352 00:21:21,150 --> 00:21:26,100 Ngunit dito gusto naming sscanf upang bumalik sa akin siguro isang int, decimal na numero, 353 00:21:26,100 --> 00:21:29,240 at ding pansamantalang trabaho, at Ipapaliwanag ko kung bakit pansamantalang trabaho sa isang sandali. 354 00:21:29,240 --> 00:21:34,250 Kaya gusto mabisa mong f bumalik 2 bagay; na lang hindi posible sa C. 355 00:21:34,250 --> 00:21:38,460 Kaya maaari kang gumawa sa paligid na sa pamamagitan ng pagpasa sa 2 na address, 356 00:21:38,460 --> 00:21:43,710 dahil sa lalong madaling ipasa ang isang function 2 address, ano ang function na sa kanila? 357 00:21:43,710 --> 00:21:49,880 Maaari itong sumulat sa mga address na iyon. Maaari mong gamitin ang * pagpapatakbo at "pumunta doon" sa bawat isa sa mga address na iyon. 358 00:21:49,880 --> 00:21:54,320 Ito ay uri ng backdoor mekanismo na ito, ngunit karaniwan para sa pagbabago sa mga halaga ng variable 359 00:21:54,320 --> 00:21:58,020 sa higit pa kaysa sa 1 lugar lamang, sa kasong ito 2. 360 00:21:58,020 --> 00:22:04,590 Ngayon, mapapansin Lalabas na ako para sa == to1, at pagkatapos ay bumabalik n kung iyon ay, sa katunayan, evaluate sa true. 361 00:22:04,590 --> 00:22:09,340 Kaya kung ano ang nangyayari sa? Well, technically, lahat talaga namin nais na mangyayari sa GetInt ito. 362 00:22:09,340 --> 00:22:12,340 Gusto naming upang i-parse, kaya na magsalita, gusto naming basahin ang string 363 00:22:12,340 --> 00:22:16,210 "1 2 3" at kung mukhang may bilang doon, 364 00:22:16,210 --> 00:22:21,360 kung ano ang namin ang nagsasabi sa sscanf gawin ay ilagay na numero, 1 2 3, sa ang variable n para sa akin. 365 00:22:21,360 --> 00:22:26,060 Bakit, pagkatapos, ginawa ko ito pati na rin? 366 00:22:26,060 --> 00:22:33,750 Ano ang papel na ginagampanan ng din sinasabi, sscanf, maaari ka ring makakuha ng isang character dito. 367 00:22:33,750 --> 00:22:36,890 [Nagsasalita ng Mag-aaral, hindi maintindihan] >> Hindi - ng decimal point ay maaaring gumana. 368 00:22:36,890 --> 00:22:40,650 Natin pindutin nang matagal na naisip para sa isang sandali. Ano pa? 369 00:22:40,650 --> 00:22:42,570 [Mag-aaral, hindi maintindihan] >> Kaya, mabuting pag-iisip, maaaring maging null karakter. 370 00:22:42,570 --> 00:22:44,970 Ang aktwal na hindi, sa kasong ito. Oo? [Estudyante, hindi maintindihan] 371 00:22:44,970 --> 00:22:47,100 >> >> ASCII. O, hayaan mo akong magbigay ng tuntuning panlahat kahit karagdagang. 372 00:22:47,100 --> 00:22:49,670 Ang% c may lamang para sa error checking. 373 00:22:49,670 --> 00:22:52,510 Hindi namin nais na character pagkatapos ang numero, 374 00:22:52,510 --> 00:22:54,980 ngunit kung ano ang na ito ay nagbibigay-daan sa akin upang gawin ay ang mga sumusunod: 375 00:22:54,980 --> 00:23:01,270 Ito lumiliko out na sscanf, bukod sa pag-iimbak ng mga halaga sa n at c, sa halimbawang ito dito, 376 00:23:01,270 --> 00:23:08,170 kung ano ito din ay nagbabalik ang bilang ng mga variable ilagay ito ng mga halaga. 377 00:23:08,170 --> 00:23:13,330 Kaya kung nag-type lamang sa 1 2 3, pagkatapos lamang ang% d upang tumugma sa 378 00:23:13,330 --> 00:23:18,830 at lamang n ay makakakuha ng naka-imbak na may halaga tulad ng 1 2 3 at walang maipo ilagay sa c; 379 00:23:18,830 --> 00:23:20,870 c nananatiling halaga ng basura, kaya na magsalita. 380 00:23:20,870 --> 00:23:23,550 Basura dahil hindi ito ay nasimulan dahil ang ilang mga halaga. 381 00:23:23,550 --> 00:23:29,390 Kaya sa kasong iyon, sscanf nagbabalik 1, dahil populated ko isa ng mga payo, 382 00:23:29,390 --> 00:23:33,650 kung saan, mahusay. Mayroon akong isang int, kaya magbakante ko ang linya upang magbakante ang memorya 383 00:23:33,650 --> 00:23:37,150 na GetString aktwal na inilaan, at pagkatapos ay bumalik ako n. 384 00:23:37,150 --> 00:23:42,210 Tao, kung ikaw ba kung saan na subukan muli pahayag ay mula, ay mula dito mismo. 385 00:23:42,210 --> 00:23:45,770 Kung, sa pamamagitan ng kaibahan, ang type ko sa 1 2 3 foo, 386 00:23:45,770 --> 00:23:48,640 ilang mga random na pagkakasunod-sunod ng mga teksto, sscanf upang makita, 387 00:23:48,640 --> 00:23:51,500 ooh, numero, ooh, ang bilang, ooh, ang bilang, ooh - f. 388 00:23:51,500 --> 00:23:54,190 At ito upang ilagay ang 1 2 3 sa n. 389 00:23:54,190 --> 00:23:59,970 Ito ay pagpunta sa ilagay ang f sa c, at pagkatapos ay bumalik 2. 390 00:23:59,970 --> 00:24:02,980 Kaya mayroon kami, lamang gamit ang pangunahing kahulugan ng pag-uugali scanf ng, 391 00:24:02,980 --> 00:24:06,170 isang napaka-simpleng paraan - na rin, complex sa unang tingin, ngunit sa pagtatapos ng araw, 392 00:24:06,170 --> 00:24:11,460 medyo simpleng mekanismo ng pagsabi, mayroong isang int, at kung gayon, ay ang tanging bagay na nakita ko? 393 00:24:11,460 --> 00:24:14,950 At puting espasyo dito ay sinadya. Kung ikaw basahin ang dokumentasyon para sa sscanf, 394 00:24:14,950 --> 00:24:18,690 ito ay nagsasabi sa iyo na kung isasama mo ang isang piraso ng puting espasyo sa simula o sa katapusan, 395 00:24:18,690 --> 00:24:24,990 masyadong ay payagan sscanf user, para sa anumang dahilan, pindutin ang spacebar 1 2 3, at na lehitimong. 396 00:24:24,990 --> 00:24:28,310 Hindi ito sumigaw sa user dahil lamang sila pindutin ang spacebar sa simula o sa katapusan, 397 00:24:28,310 --> 00:24:32,160 na sandali lang mas user-friendly. 398 00:24:32,160 --> 00:24:34,160 >> Anumang mga katanungan, pagkatapos, sa mga GetInts? Oo? 399 00:24:34,160 --> 00:24:36,820 [Estudyante tanong, hindi maintindihan] 400 00:24:36,820 --> 00:24:40,740 >> Magandang katanungan. Ano ang kung ikaw-type sa isang pansamantalang trabaho, tulad ng f, at pindutin ang ipasok 401 00:24:40,740 --> 00:24:47,830 nang hindi mag-type 1 2 3; kung ano sa tingin mo ang pag-uugali ng ang linya ng code pagkatapos? 402 00:24:47,830 --> 00:24:50,500 Kaya maaaring masaklawan ng sscanf na masyadong, dahil sa kasong iyon, 403 00:24:50,500 --> 00:24:56,280 hindi ito upang punan n o c; ito sa halip na bumalik 0. 404 00:24:56,280 --> 00:25:01,540 Kung saan, din ako pansing sitwasyong iyon, dahil ang inaasahang halaga na gusto kong ay 1. 405 00:25:01,540 --> 00:25:07,310 Gusto ko lang 1, at 1 bagay lamang na puno. Magandang tanong. Iba? 406 00:25:07,310 --> 00:25:09,610 >> Lahat ng karapatan, kaya ipaalam sa ay hindi pumunta sa pamamagitan ng lahat ng mga function in dito, 407 00:25:09,610 --> 00:25:11,820 ngunit ang isa na mukhang, marahil, ng natitirang interes 408 00:25:11,820 --> 00:25:14,530 ay GetString dahil ito lumiliko out na GetFloat, GetInt, 409 00:25:14,530 --> 00:25:19,490 GetDouble, GetLongLong lahat ng tumikin ng maraming ng kanilang mga pag-andar sa GetString. 410 00:25:19,490 --> 00:25:22,860 Kaya sabihin kumuha ng isang pagtingin sa kung paano siya ay ipinatupad dito. 411 00:25:22,860 --> 00:25:27,040 Ang hitsura ng kaunti complex ngunit ginagamit nito ang parehong batayan 412 00:25:27,040 --> 00:25:29,680 namin na sinimulan ng pakikipag-usap tungkol sa huling linggo. Kaya sa GetString, 413 00:25:29,680 --> 00:25:32,670 na walang argumento bilang bawat ang walang bisa hanggang dito, 414 00:25:32,670 --> 00:25:37,110 at nagbabalik ng isang string; kaya ako deklarasyon ng isang string na tinatawag na buffer. 415 00:25:37,110 --> 00:25:39,670 Hindi ko talaga alam ano ang pagpunta sa ginagamit para sa pa, ngunit gagamitin namin makita. 416 00:25:39,670 --> 00:25:42,950 Hitsura tulad ng kapasidad, sa pamamagitan ng default, 0; hindi pa sigurado kung saan ito ay pagpunta. 417 00:25:42,950 --> 00:25:44,920 Hindi sigurado kung ano n nangyayari na ginagamit para sa pang. 418 00:25:44,920 --> 00:25:47,860 Ngunit ngayon ito pagkuha ng kaunti pa sa kawili-wili, kaya sa line 243, 419 00:25:47,860 --> 00:25:51,760 idedeklara namin ang isang int c, ito ay uri ng bobo detalye. 420 00:25:51,760 --> 00:25:58,080 Pansamantalang trabaho ay 8 bit, at 8 bits ay maaaring iimbak sa kung gaano karaming iba't ibang mga halaga? 421 00:25:58,080 --> 00:26:03,310 256. Ang problema, kung gusto mong magkaroon ng 256 iba't ibang mga character na ASCII, 422 00:26:03,310 --> 00:26:06,210 kung saan mayroong, kung sa tingin mo bumalik, at ito ay hindi isang bagay na kabisaduhin. 423 00:26:06,210 --> 00:26:09,100 Ngunit kung sa tingin mo na malaki ASCII chart nagkaroon kami linggo ang nakalipas, 424 00:26:09,100 --> 00:26:13,780 mayroong, sa kasong iyon, 128 o 256 mga character na ASCII. 425 00:26:13,780 --> 00:26:16,220 Ginamit namin ang lahat ng mga pattern ng 0 at 1 ang bahala. 426 00:26:16,220 --> 00:26:19,410 Na ang isang problema kung nais mo upang makita ang isang error. 427 00:26:19,410 --> 00:26:23,290 Dahil kung gumagamit ka na ng 256 halaga para sa iyong mga character, 428 00:26:23,290 --> 00:26:26,390 hindi mo talaga magplano magpatuloy, dahil ngayon mayroon kang walang paraan ng pagsabi, 429 00:26:26,390 --> 00:26:29,750 "Ito ay hindi isang legit karakter, ito ay ilang maling mensahe." 430 00:26:29,750 --> 00:26:32,430 Kaya kung ano ang mundo ang ginagawa, ginagamit nila ang susunod na pinakamalaking halaga, 431 00:26:32,430 --> 00:26:35,790 isang bagay tulad ng isang int sa gayon ay mayroon kang mabaliw bilang ng mga bits, 432 00:26:35,790 --> 00:26:39,610 32 para sa 4 bilyong posibleng halaga, sa gayon ay maaari mo lamang magtapos up gamit, 433 00:26:39,610 --> 00:26:44,800 mahalagang, 257 sa kanila, 1 ng kung saan ay may ilang mga espesyal na kahulugan bilang isang error. 434 00:26:44,800 --> 00:26:49,190 >> Kaya sabihin makita kung paano ito gumagana. Sa linya 246, mayroon akong ito malaki habang loop 435 00:26:49,190 --> 00:26:54,530 na pagtawag fgetc; file ng kahulugan ng f, getc, at pagkatapos stdin. 436 00:26:54,530 --> 00:26:59,030 Lumiliko lamang ito sa mas tumpak na paraan ng nagsasabing "basahin ang input mula sa keyboard." 437 00:26:59,030 --> 00:27:02,730 Standard keyboard input paraan, ang ibig sabihin ng standard output screen, 438 00:27:02,730 --> 00:27:06,920 at standard na error, na gagamitin namin makita sa pset 4, ay nangangahulugan na ang screen, 439 00:27:06,920 --> 00:27:09,670 ngunit ang isang espesyal na bahagi ng screen upang hindi ito conflated 440 00:27:09,670 --> 00:27:13,760 na may aktwal na output na nilayon mo upang i-print; ngunit higit pa sa na sa hinaharap. 441 00:27:13,760 --> 00:27:19,430 Kaya fgetc lamang nangangahulugan basahin ang isang character mula sa keyboard, at mag-imbak ang mga ito kung saan? 442 00:27:19,430 --> 00:27:24,000 Iimbak ito sa c, at pagkatapos suriin, kaya lang ako sa paggamit ng ilang boolean conjunctions dito, 443 00:27:24,000 --> 00:27:28,430 suriin na ito ay hindi katumbas ng \ n, kaya ang gumagamit ay pindutin ang enter. 444 00:27:28,430 --> 00:27:31,510 Gusto naming ihinto sa puntong iyon, dulo ng loop, at gusto rin naming mag-check 445 00:27:31,510 --> 00:27:36,170 para sa espesyal na pare-pareho, EOF, na kung alam mo o hulaan - ano ang tumayo para sa? 446 00:27:36,170 --> 00:27:39,860 Pagtatapos ng file. Kaya ito ay uri ng walang saysay, dahil kung nagta-type ako sa keyboard, 447 00:27:39,860 --> 00:27:41,900 may talagang walang file na kasangkot sa, 448 00:27:41,900 --> 00:27:44,330 ngunit ito ay lamang ayusin ng generic na termino na ginagamit sa ibig sabihin 449 00:27:44,330 --> 00:27:50,320 na walang ibang darating mula sa mga daliri ang tao. EOF. Pagtatapos ng file. 450 00:27:50,320 --> 00:27:52,600 Bilang isang bukod, kung sakaling mo na pindutin ang control d sa iyong keyboard, 451 00:27:52,600 --> 00:27:54,680 hindi na mayroon ka pa; mo na pindutin ang control c. 452 00:27:54,680 --> 00:27:57,920 Ngunit ang control d nagpapadala ito ng espesyal na pare-pareho na tinatawag na EOF. 453 00:27:57,920 --> 00:28:03,100 >> Kaya ngayon namin lamang magkaroon ng ilang dynamic na paglalaan ng memorya. 454 00:28:03,100 --> 00:28:06,460 Kaya kung n + 1> kapasidad, ngayon kukunin ko na ipaliwanag n. 455 00:28:06,460 --> 00:28:09,380 n ay lamang kung gaano karaming mga byte ay kasalukuyang sa buffer, 456 00:28:09,380 --> 00:28:11,970 ang string na kasalukuyan mong pagbuo mula sa user. 457 00:28:11,970 --> 00:28:16,240 Kung mayroon kang higit pang mga character sa iyong buffer kaysa sa mayroon kang kapasidad sa buffer, 458 00:28:16,240 --> 00:28:20,760 intuitively, kung ano ang kailangan namin upang gawin pagkatapos ay magtalaga ng karagdagang kapasidad. 459 00:28:20,760 --> 00:28:24,490 Pupunta ako sa sagap sa paglipas ng ilang ng aritmetika dito 460 00:28:24,490 --> 00:28:26,900 at tumutok lamang sa function na ito dito. 461 00:28:26,900 --> 00:28:29,170 Alam mo kung ano ang malloc, o hindi bababa sa pangkalahatan pamilyar. 462 00:28:29,170 --> 00:28:32,380 Kumuha ng hula kung ano ang realloc ginagawa. [Estudyante sagot, hindi maintindihan] 463 00:28:32,380 --> 00:28:35,690 >> Oo. At hindi ito lubos pagdaragdag ng memorya; ito reallocates memory tulad ng sumusunod: 464 00:28:35,690 --> 00:28:40,530 Kung mayroon pa rin room sa dulo ng string upang bigyan ka ng higit pa sa na memorya 465 00:28:40,530 --> 00:28:43,370 kaysa sa orihinal na ito ay nagbibigay sa iyo, pagkatapos ay makakakuha ka na ng karagdagang memorya. 466 00:28:43,370 --> 00:28:46,640 Sa gayon ay maaari mo lamang paglalagay ng ang mga character na string pabalik upang i-back i-back upang i-back. 467 00:28:46,640 --> 00:28:49,290 Ngunit kung hindi iyon ang kaso, dahil naghintay ka masyadong mahaba 468 00:28:49,290 --> 00:28:51,700 at isang bagay random nakuha plopped sa memory doon, ngunit may dagdag na 469 00:28:51,700 --> 00:28:56,480 memory pababa dito, na okay lang. Realloc ay pagpunta sa gawin ang lahat ng mga mabibigat na nakakataas para sa iyo, 470 00:28:56,480 --> 00:28:58,810 ilipat ang string na nabasa mo na sa samakatuwid ay malayo mula dito, 471 00:28:58,810 --> 00:29:02,550 ilagay ito doon, at pagkatapos ay magbibigay sa iyo ng ilang higit pang mga paliparan sa puntong iyon. 472 00:29:02,550 --> 00:29:05,610 Kaya may isang wave ng kamay, sabihin sabihin sa akin na ang GetString ay ginagawa 473 00:29:05,610 --> 00:29:09,540 ito na nagsisimula sa isang maliit na buffer, siguro 1 single character, 474 00:29:09,540 --> 00:29:12,300 at kung ang user ay uri sa 2 character, GetString nagtatapos up 475 00:29:12,300 --> 00:29:15,210 pagtawag realloc at sabi, 'Ooh, 1 na character ay hindi sapat. 476 00:29:15,210 --> 00:29:18,480 Bigyan mo ako 2 character. ' Pagkatapos kung mong basahin sa pamamagitan ng logic ng loop, 477 00:29:18,480 --> 00:29:21,070 ito upang sabihin, 'Ooh, ang mga gumagamit na nai-type sa 3 mga character. 478 00:29:21,070 --> 00:29:25,690 Bigyan mo ako ngayon hindi 2 ngunit 4 na mga character, at pagkatapos ay bigyan ako 8, pagkatapos ninyo ako 16 at 32. ' 479 00:29:25,690 --> 00:29:28,180 Ang katotohanan na ako pagdodoble ang kapasidad sa bawat oras 480 00:29:28,180 --> 00:29:30,320 ay nangangahulugan na ang buffer ang hindi pagpunta sa palaguin mabagal. 481 00:29:30,320 --> 00:29:35,870 Ito ay upang mapalago ang napakabilis na, at kung ano ang maaaring ang bentahe ng na? 482 00:29:35,870 --> 00:29:38,540 Bakit ako pagdodoble ang laki ng buffer, kahit na ang user 483 00:29:38,540 --> 00:29:41,450 maaaring kailangan lang 1 dagdag na character mula sa keyboard? 484 00:29:41,450 --> 00:29:44,830 [Estudyante sagot, hindi maintindihan]. >> Ano iyan? 485 00:29:44,830 --> 00:29:46,750 Eksakto. Hindi mo binabalak na palaguin ang mga ito nang madalas. 486 00:29:46,750 --> 00:29:48,870 At ito lamang ang uri ng - you're hedging dito ang iyong mga taya. 487 00:29:48,870 --> 00:29:54,150 Ideya pagiging na hindi mo nais na tawagan realloc ng maraming, dahil ito ay may gawi na maging mabagal ang. 488 00:29:54,150 --> 00:29:56,840 Anumang oras na hinihiling mo sa operating system memory, tulad ng makikita mo sa lalong madaling panahon makita 489 00:29:56,840 --> 00:30:00,620 sa isang hinaharap na hanay ng problema, may kaugaliang upang tumagal ng ilang oras. 490 00:30:00,620 --> 00:30:04,980 Kaya pagliit na halaga ng oras, kahit na kung ikaw ay aksaya ng ilang espasyo, may kaugaliang upang maging isang magandang bagay. 491 00:30:04,980 --> 00:30:07,250 >> Ngunit kung namin basahin sa pamamagitan ng huling bahagi ng GetString dito, 492 00:30:07,250 --> 00:30:10,880 at muli, unawa bawat solong linya dito ay hindi kaya mahalaga ngayon. 493 00:30:10,880 --> 00:30:14,830 Ngunit mapansin na ito kalaunan tawag malloc muli, at allocates 494 00:30:14,830 --> 00:30:16,980 nang eksakto tulad ng maraming mga byte bilang kailangan nito para sa string 495 00:30:16,980 --> 00:30:21,620 at pagkatapos throws ang layo sa pamamagitan ng pagtawag sa libreng, ang labis na malaking buffer, 496 00:30:21,620 --> 00:30:23,510 kung ito ay sa katunayan Nakakuha Dinoble masyadong maraming beses. 497 00:30:23,510 --> 00:30:25,970 Sa maikling, na kung paano GetString ay nagtatrabaho lahat oras na ito. 498 00:30:25,970 --> 00:30:30,100 Lahat ng ito ginagawa ay basahin ang isang character sa isang pagkakataon muli at muli at muli 499 00:30:30,100 --> 00:30:37,930 at sa bawat oras na ito ay nangangailangan ng ilang karagdagang memorya, nagtatanong ang operating system ito sa pamamagitan ng pagtawag sa realloc. 500 00:30:37,930 --> 00:30:41,660 Anumang mga katanungan? Ayos lang. 501 00:30:41,660 --> 00:30:45,220 >> Isang atake. Ngayon na naiintindihan namin payo, o hindi bababa sa 502 00:30:45,220 --> 00:30:47,560 nagiging pamilyar sa mga payo, 503 00:30:47,560 --> 00:30:50,020 sabihin isaalang-alang kung paano ang buong mundo ay nagsimulang upang tiklupin 504 00:30:50,020 --> 00:30:53,160 kung hindi mo pa masyadong ipagtanggol laban adversarial mga gumagamit, 505 00:30:53,160 --> 00:30:55,180 mga taong sinusubukang i-Hack sa iyong system. 506 00:30:55,180 --> 00:31:00,260 Mga tao na sinusubukang nakawin ang iyong software sa pamamagitan ng circumventing ilang pagpaparehistro code 507 00:31:00,260 --> 00:31:02,150 na maaaring sila kung hindi man ay i-type in. 508 00:31:02,150 --> 00:31:04,860 Tingnan sa halimbawang ito dito, na lamang ang C code 509 00:31:04,860 --> 00:31:07,920 na may isang function na pangunahing sa ibaba, na tawag ng isang function foo, 510 00:31:07,920 --> 00:31:12,100 at kung ano ang pagpasa sa foo? [Mag-aaral] Ang isang argumento. 511 00:31:12,100 --> 00:31:15,660 >> Single argumento. Kaya argv [1], na nangangahulugan na ang unang salita ang nai-type ng user 512 00:31:15,660 --> 00:31:19,150 sa linya ng command pagkatapos a.out o anumang programa ay tinatawag na. 513 00:31:19,150 --> 00:31:24,920 Kaya foo, sa tuktok, tumatagal sa isang pansamantalang trabaho *, ngunit magpasinda * kung ano? 514 00:31:24,920 --> 00:31:28,860 String. Wala bagong dito, at mang na tinatawag na ang string na bar. 515 00:31:28,860 --> 00:31:36,090 Ang line dito, magpasinda c [12], sa uri ng semi-teknikal Ingles, ano ang linya na ito ginagawa? 516 00:31:36,090 --> 00:31:40,640 Array ng -? Character. Bigyan mo ako ng isang hanay ng mga 12 character. 517 00:31:40,640 --> 00:31:44,970 Kaya maaari naming tumawag ito ng buffer. Ito ang technically tinatawag c, ngunit isang buffer sa programming 518 00:31:44,970 --> 00:31:47,890 lamang ay nangangahulugan ng grupo ng mga puwang na maaari mong ilagay ang ilang mga bagay-bagay. 519 00:31:47,890 --> 00:31:49,940 >> Pagkatapos bilang wakas, memcpy, hindi kami ginagamit bago. 520 00:31:49,940 --> 00:31:52,380 Ngunit maaari mong malamang na hulaan kung ano ang ginagawa nito. Ito kinokopya sa memory. 521 00:31:52,380 --> 00:31:58,790 Ano ang gagawin? Well, tila ito kinokopya bar, input nito, sa c, 522 00:31:58,790 --> 00:32:03,420 ngunit lamang hanggang sa haba ng bar. 523 00:32:03,420 --> 00:32:07,440 Ngunit mayroong isang bug dito. 524 00:32:07,440 --> 00:32:14,500 Okay, kaya technically dapat naming talagang gawin strlen (bar) x sizeof (pansamantalang trabaho), na tama. 525 00:32:14,500 --> 00:32:17,920 Ngunit sa ang pinakamasama kaso dito, sabihin ipinapalagay na that's - ito, okay. 526 00:32:17,920 --> 00:32:23,760 Pagkatapos may 2 bug. Kaya sizeof (pansamantalang trabaho), lahat ng karapatan, sabihin ito ng kaunti mas malawak na. 527 00:32:23,760 --> 00:32:28,860 Kaya ngayon ay may pa rin ng isang bug, na kung ano ang? 528 00:32:28,860 --> 00:32:31,630 [Estudyante sagot, hindi maintindihan] >> Suriin para sa kung ano? Okay, kaya dapat naming check 529 00:32:31,630 --> 00:32:35,010 null, dahil masamang mangyayari kapag ang iyong pointer ay null, 530 00:32:35,010 --> 00:32:38,490 Dahil maaari mong magtapos pagpunta doon, at hindi ka kailanman dapat na pagpunta sa null 531 00:32:38,490 --> 00:32:40,890 sa pamamagitan ng dereferencing ito sa operator *. 532 00:32:40,890 --> 00:32:45,250 Sa gayon ay mabuti, at ano pa ang namin ang paggawa? Lohikal na may lamat dito masyadong. 533 00:32:45,250 --> 00:32:47,650 [Estudyante sagot, hindi maintindihan] 534 00:32:47,650 --> 00:32:51,340 >> Kaya suriin kung argc ≥ 2? 535 00:32:51,340 --> 00:32:54,130 Okay, kaya may 3 mga bug sa programang ito dito. 536 00:32:54,130 --> 00:33:00,080 Hindi namin check kung ang user ay talagang type sa anuman sa argv [1], ang mahusay. 537 00:33:00,080 --> 00:33:02,240 Kaya kung ano ang sa ikatlong bug? Oo? 538 00:33:02,240 --> 00:33:04,420 [Estudyante sagot, hindi maintindihan] >> Magandang. 539 00:33:04,420 --> 00:33:09,590 Kaya namin naka-check ang isang sitwasyon. Naka-check nang kataon lamang namin huwag kopyahin ang higit pang memory 540 00:33:09,590 --> 00:33:12,800 kaysa ay lumampas sa haba ng bar. 541 00:33:12,800 --> 00:33:15,720 Kaya kung ang string ng gumagamit na nai-type sa 10 character ang haba, 542 00:33:15,720 --> 00:33:18,260 na ito ay nagsasabi, 'Tanging kopyahin 10 character.' 543 00:33:18,260 --> 00:33:21,140 At na okay lang, ngunit kung ano kung ang gumagamit na nai-type sa isang salita sa prompt 544 00:33:21,140 --> 00:33:29,360 tulad ng 20 salita na character; ito, sinasabi ng kopya 20 character mula sa bar sa kung anong? 545 00:33:29,360 --> 00:33:32,840 c, kung hindi man kilala bilang aming buffer, na nangangahulugan ka lang sinulat ni data 546 00:33:32,840 --> 00:33:35,950 8 byte lokasyon na hindi mo pag-aari, 547 00:33:35,950 --> 00:33:38,320 at hindi ito sa iyo sa pakiramdam na hindi ka na kailanman inilalaan sa kanila. 548 00:33:38,320 --> 00:33:41,190 Kaya ito ay kung ano ang karaniwang kilala bilang atake buffer overflow, 549 00:33:41,190 --> 00:33:46,650 o paglampas sa atake buffer, at ito ay atake sa kamalayan na kung ang user 550 00:33:46,650 --> 00:33:50,650 o ang programa na pagtawag sa iyong function na ay ginagawa ito maliciously, 551 00:33:50,650 --> 00:33:53,780 kung ano ang aktwal na ang susunod na mangyayari ay medyo masamang. 552 00:33:53,780 --> 00:33:55,690 >> Natin tingnan ang larawang ito dito. 553 00:33:55,690 --> 00:33:59,070 Ang larawan na ito ay kumakatawan sa iyong stack ng memory. 554 00:33:59,070 --> 00:34:01,050 At isipin ang na sa tuwing tinatawag mo ang isang function, 555 00:34:01,050 --> 00:34:04,520 kang makakuha ng ito maliit na frame sa stack at pagkatapos isa at pagkatapos ay isa pang at pagkatapos ay isa pang. 556 00:34:04,520 --> 00:34:07,250 At sa gayon ay malayo lang namin uri ng malayo mga ito ang layo bilang parihaba 557 00:34:07,250 --> 00:34:09,380 alinman doon sa board o sa screen dito. 558 00:34:09,380 --> 00:34:12,219 Ngunit kung namin mag-zoom in sa isa sa mga parihaba, 559 00:34:12,219 --> 00:34:16,460 kapag tumawag ka ng isang function foo, lumiliko na may higit pa sa stack 560 00:34:16,460 --> 00:34:18,739 sa loob ng na frame at na parihaba 561 00:34:18,739 --> 00:34:23,370 kaysa lamang x at y at isang at b, tulad namin ay pakikipag-usap tungkol makipagpalitan. 562 00:34:23,370 --> 00:34:25,949 Ito lumiliko out na may ilang mga mas mababang antas ng detalye, 563 00:34:25,949 --> 00:34:27,780 kasama ng mga ito bumalik address. 564 00:34:27,780 --> 00:34:33,020 Kaya ito lumiliko out kapag pangunahing tawag foo, ang pangunahing ay upang ipaalam sa foo 565 00:34:33,020 --> 00:34:36,760 kung ano ang pangunahing address sa memory ng computer. 566 00:34:36,760 --> 00:34:40,659 Dahil kung hindi man, sa lalong madaling foo tapos na execute, tulad ng sa kasong ito dito, 567 00:34:40,659 --> 00:34:43,790 sa sandaling naabot mo na ito malapit kulot suhay sa dulo ng foo, 568 00:34:43,790 --> 00:34:48,860 kung paano ang ano ba ang foo malaman kung saan ang kontrol ng programa ay dapat pumunta? 569 00:34:48,860 --> 00:34:52,460 Ito lumiliko out na ang sagot sa tanong na sa na pulang parihaba dito. 570 00:34:52,460 --> 00:34:56,130 Ito ay kumakatawan sa isang pointer, at ito ay hanggang sa ang computer upang mag-imbak, pansamantalang, 571 00:34:56,130 --> 00:35:00,250 sa tinatawag na stack ang address ng pangunahing upang ang sa lalong madaling foo tapos na e-execute, 572 00:35:00,250 --> 00:35:04,110 computer na ang nakakaalam kung saan at kung ano ang linya sa pangunahing upang bumalik sa. 573 00:35:04,110 --> 00:35:06,900 Nai-save na frame pointer nauugnay katulad na ito. 574 00:35:06,900 --> 00:35:09,620 Magpasinda * bar dito ay kumakatawan sa kung ano ang? 575 00:35:09,620 --> 00:35:14,740 Well, ngayon ang asul na segment dito foo ng frame, kung ano ang bar? 576 00:35:14,740 --> 00:35:18,300 Okay, sa gayon bar lamang ang argumento sa pag-andar ng foo. 577 00:35:18,300 --> 00:35:20,720 >> Kaya ngayon hindi namin muli sa pamilyar na larawan. 578 00:35:20,720 --> 00:35:22,960 Mayroong higit pang mga bagay-bagay at higit pa distractions sa screen 579 00:35:22,960 --> 00:35:27,490 ngunit ito mapusyaw na asul na segment ay kung ano ang namin ang pagguhit sa Chalkboard para sa isang bagay tulad makipagpalitan. 580 00:35:27,490 --> 00:35:31,890 Na frame para sa foo at ang tanging bagay sa ito ngayon ay bar, 581 00:35:31,890 --> 00:35:34,630 na ang parameter na ito. 582 00:35:34,630 --> 00:35:39,840 Ngunit ano pa ang dapat sa stack, ayon sa ang code na ito dito? 583 00:35:39,840 --> 00:35:44,280 Magpasinda c [12]. Kaya dapat rin naming makita ang 12 mga parisukat ng memory, 584 00:35:44,280 --> 00:35:46,260 inilalaan sa isang variable na tinatawag c. 585 00:35:46,260 --> 00:35:48,340 At sa katunayan namin na sa screen. 586 00:35:48,340 --> 00:35:51,650 Pinakatuktok may c [0], at pagkatapos ay ang may-akda ng diagram na ito 587 00:35:51,650 --> 00:35:55,130 ay hindi abala ang pagguhit ng lahat ng mga parisukat ngunit may katunayan 12 doon 588 00:35:55,130 --> 00:36:00,120 dahil kung titingnan mo sa kanan sa ibaba, c [11], kung ikaw ay mabibilang mula 0, ang 12 tulad byte. 589 00:36:00,120 --> 00:36:06,190 Ngunit narito ang problema: Sa aling mga direksyon ay c lumalaking? 590 00:36:06,190 --> 00:36:10,390 Uri ng tuktok pababa, i-right? Kung nagsisimula ito sa tuktok at lumalaki sa ibaba, 591 00:36:10,390 --> 00:36:13,480 ay hindi mukhang iniwanan namin sa ating sarili magkano paliparan dito sa lahat. 592 00:36:13,480 --> 00:36:15,320 Namin ang uri ng ipininta sa ating sarili sa isang sulok, 593 00:36:15,320 --> 00:36:20,210 at c [11] ay karapatan up laban sa bar, na karapatan up laban sa stack frame pointer, 594 00:36:20,210 --> 00:36:23,800 na karapatan up laban sa return address; mayroong hindi hihigit room. 595 00:36:23,800 --> 00:36:26,100 Kaya kung ano ang implikasyon sa, pagkatapos, kung magroskas up ka, 596 00:36:26,100 --> 00:36:30,460 at subukan mong pagbabasa 20 bytes sa isang 12-byte buffer? 597 00:36:30,460 --> 00:36:33,460 Kung saan ang mga 8 karagdagang mga byte pagpunta sa pumunta? 598 00:36:33,460 --> 00:36:36,370 Inside lahat ng iba pa, ang ilang na kung saan ay sobrang mahalaga. 599 00:36:36,370 --> 00:36:40,480 At ang pinaka-mahalagang bagay, potensyal na, ay ang pulang kahon doon, return address. 600 00:36:40,480 --> 00:36:44,720 Dahil ipagpalagay na ikaw ay alinman sinasadyang o adversarially 601 00:36:44,720 --> 00:36:48,040 patungan ng mga 4 bytes, na pointer address, 602 00:36:48,040 --> 00:36:53,190 hindi lamang na may basura, ngunit may isang numero na mangyayari sa kumakatawan sa isang aktwal na address sa memory? 603 00:36:53,190 --> 00:36:55,930 Ano ang ang implicaiton, lohikal? 604 00:36:55,930 --> 00:36:59,080 [Estudyante sagot, hindi maintindihan] >> Mismong. Kapag foo nagbabalik 605 00:36:59,080 --> 00:37:03,560 hit na kulot suhay, ang programa ay magpatuloy na hindi upang bumalik sa pangunahing, 606 00:37:03,560 --> 00:37:08,320 ito upang bumalik sa anumang address na pulang kahon. 607 00:37:08,320 --> 00:37:11,560 >> Ngayon, sa kaso ng circumventing ng pagpaparehistro ng software, 608 00:37:11,560 --> 00:37:14,400 kung ano ang address na ibinalik sa ang function 609 00:37:14,400 --> 00:37:18,820 na normal ay makakakuha ng tinatawag na pagkatapos na iyong binayaran para sa mga software at inputted ang iyong pagpaparehistro code? 610 00:37:18,820 --> 00:37:23,160 Maaari mong pag-uri-uriin ng nanlilinlang ang computer sa hindi pagpunta dito, ngunit sa halip, ang pagpunta dito. 611 00:37:23,160 --> 00:37:27,950 O, kung ikaw ay talagang matalino, kalaban ng aktwal type in sa keyboard, 612 00:37:27,950 --> 00:37:32,500 halimbawa, hindi isang aktwal na salita, hindi 20 character, ngunit ipagpalagay na siya 613 00:37:32,500 --> 00:37:36,200 uri sa ilang mga character na kumakatawan ng code? 614 00:37:36,200 --> 00:37:38,860 At hindi ito ay pagpunta sa C code, ito ang mga character na 615 00:37:38,860 --> 00:37:42,920 na kumakatawan sa binary code ng machine, 0 at 1 sa. 616 00:37:42,920 --> 00:37:46,740 Ngunit ipagpalagay na ito ay sapat na matalino upang magawa iyon, upang sa paanuman ilagay sa GetString prompt 617 00:37:46,740 --> 00:37:49,460 isang bagay na mahalagang inipon code, 618 00:37:49,460 --> 00:37:56,900 at ang huling 4 bytes patungan na return address, at kung anong address ang input na? 619 00:37:56,900 --> 00:38:01,860 Nag-iimbak ito sa pulang parihaba ang address ng unang byte ng buffer. 620 00:38:01,860 --> 00:38:04,270 Kaya mayroon kang talagang matalino, at ito ng maraming pagsubok at error 621 00:38:04,270 --> 00:38:08,500 para sa mga masamang tao out doon, ngunit kung maaari mong malaman kung gaano kalaki ang buffer ito, 622 00:38:08,500 --> 00:38:12,170 tulad na ang huling ilang mga byte sa input na magbigay sa iyo sa programa 623 00:38:12,170 --> 00:38:15,970 mangyayari sa katumbas sa address ng simula ng iyong buffer, 624 00:38:15,970 --> 00:38:22,270 maaari mong gawin ito. Kung sabihin namin, normal, kumusta, at \ 0, na kung ano ang nagtatapos sa buffer. 625 00:38:22,270 --> 00:38:27,860 Ngunit kung hindi namin mas matalino, at punan namin na buffer sa kung ano ang makikita namin generically call na code ng atake, 626 00:38:27,860 --> 00:38:31,920 A, A, A, S: atake, atake, atake, atake, kung saan ito ay isang bagay na ang isang bagay masamang. 627 00:38:31,920 --> 00:38:35,190 Well, kung ano ang mangyayari kung ikaw ay talagang matalino, maaari mong gawin ito: 628 00:38:35,190 --> 00:38:41,740 Sa pulang kahon dito ay isang sequence ng mga numero: 80, CO, 35, 08. 629 00:38:41,740 --> 00:38:44,890 Pansinin na na tumutugma sa numero na dito. 630 00:38:44,890 --> 00:38:47,280 Sa reverse pagkakasunud-sunod, ngunit higit pa sa na ang ilang iba pang mga oras. 631 00:38:47,280 --> 00:38:51,430 Pansinin na ang return address na ito ay sadyang binago 632 00:38:51,430 --> 00:38:54,970 katumbas ng address dito, hindi ang address ng pangunahing. 633 00:38:54,970 --> 00:39:00,170 Kaya kung ang masamang tao ay sobrang na smart, siya ay pagpunta sa isama sa na atake code 634 00:39:00,170 --> 00:39:02,890 isang bagay tulad ng, 'Tanggalin ang lahat ng mga file ng user.' 635 00:39:02,890 --> 00:39:06,320 O 'Kopyahin ang password,' o 'Lumikha ng isang user account na maaari kong mag-log in sa.' 636 00:39:06,320 --> 00:39:10,130 Anumang bagay sa lahat, at ito ay parehong mga panganib at ang kapangyarihan ng C. 637 00:39:10,130 --> 00:39:12,900 Dahil mayroon kang access sa memory sa pamamagitan ng pointer 638 00:39:12,900 --> 00:39:15,950 at maaari mong samakatuwid isulat ang anumang nais mo sa memory ng computer. 639 00:39:15,950 --> 00:39:19,290 Maaari kang gumawa ng isang computer ng anumang bagay na gusto mo sa pamamagitan lamang ng 640 00:39:19,290 --> 00:39:22,780 nagki ito tumalon sa paligid sa loob ng sarili nitong espasyo sa memory. 641 00:39:22,780 --> 00:39:27,230 At ito, sa araw na ito, kaya maraming mga programa at mga kaya maraming mga website na nakompromiso 642 00:39:27,230 --> 00:39:29,730 pasingawan sa mga tao na sinasamantala ng mga ito. 643 00:39:29,730 --> 00:39:32,510 At ito ay maaaring mukhang tulad ng isang napaka-sopistikadong atake, 644 00:39:32,510 --> 00:39:34,220 ngunit hindi ito palaging simulan na paraan. 645 00:39:34,220 --> 00:39:36,770 >> Katotohanan ay na ang masamang tao ay karaniwang gawin ay, 646 00:39:36,770 --> 00:39:41,470 kung ito ay isang programa sa command line o isang GUI na programa o sa isang website, 647 00:39:41,470 --> 00:39:43,290 ay mo lamang simulan ang pagbibigay ng bagay na walang kapararakan. 648 00:39:43,290 --> 00:39:46,940 Kang mag-type sa isang talagang malaking salita sa patlang ng paghahanap at pindutin ang enter, 649 00:39:46,940 --> 00:39:49,030 at hintayin mo upang makita kung ang website ng nag-crash. 650 00:39:49,030 --> 00:39:53,270 O hintayin mo upang makita kung ang programa sa manifests ilang mga mensahe ng error. 651 00:39:53,270 --> 00:39:55,480 Dahil kung makakakuha ka ng masuwerteng, bilang ang masamang tao, 652 00:39:55,480 --> 00:39:59,610 at magbigay sa iyo ng ilang mga nakatutuwang input na nagka-crash ang programa, 653 00:39:59,610 --> 00:40:02,280 na nangangahulugan na programmer ay hindi inaasahan ang iyong masamang pag-uugali 654 00:40:02,280 --> 00:40:05,420 na nangangahulugan na maaari mong marahil, may sapat na pagsisikap, 655 00:40:05,420 --> 00:40:09,870 sapat na pagsubok at error, malaman kung paano sa pasahod ng mas tumpak na pag-atake. 656 00:40:09,870 --> 00:40:15,900 Kaya bilang magkano ang isang bahagi ng seguridad ay hindi lamang pag-iwas sa mga pag-atake sa kabuuan, ngunit paghanap sa kanila 657 00:40:15,900 --> 00:40:20,250 at talagang aktwal na tumitingin sa logs at nakikita kung ano ang mabaliw input ay may mga tao na nai-type sa iyong website. 658 00:40:20,250 --> 00:40:26,040 Ano ang mga term sa paghahanap tao na-type sa iyong website sa mga pag-asa ng umaapaw ilang buffer? 659 00:40:26,040 --> 00:40:28,900 At ito kahulihan babagsak sa simpleng mga pangunahing kaalaman ng kung ano ang isang array, 660 00:40:28,900 --> 00:40:32,510 at kung ano ang ibig sabihin upang maglaan at gamitin ang memory? 661 00:40:32,510 --> 00:40:34,920 At na may kaugnayan sa na, masyadong, ito. 662 00:40:34,920 --> 00:40:37,520 >> Kaya sabihin lamang sulyap sa loob ng isang hard drive pa muli. 663 00:40:37,520 --> 00:40:40,190 Kaya manariwa sa diwa mula sa isa o dalawang linggo ang nakalipas na kapag mo i-drag ang mga file 664 00:40:40,190 --> 00:40:45,470 sa iyong recycle bin o trash can, ano ang mangyayari? 665 00:40:45,470 --> 00:40:47,850 [Mag-aaral] Walang. >> Oo, ganap na walang. Sa paglaon kung nagpapatakbo ka ng mababang 666 00:40:47,850 --> 00:40:51,370 sa disk space, Windows o Mac OS ay simulan ang pagtanggal ng mga file para sa iyo. 667 00:40:51,370 --> 00:40:53,670 Ngunit kung i-drag ka ng isang bagay doon, pagkatapos ito ay hindi sa lahat ng ligtas. 668 00:40:53,670 --> 00:40:56,550 Lahat ng iyong roomate, kaibigan o miyembro ng pamilya ay may sa gawin ay i-double click, at voila. 669 00:40:56,550 --> 00:40:59,720 Mayroong ang lahat ng mga pahapyaw na file na sinubukan mong tanggalin. 670 00:40:59,720 --> 00:41:02,840 Kaya ang karamihan sa atin ng hindi bababa sa malaman na mayroon kang upang i-right click o kontrolin ang pag-click 671 00:41:02,840 --> 00:41:05,320 at walang laman ang basura, o isang bagay tulad na. 672 00:41:05,320 --> 00:41:07,900 Ngunit kahit na pagkatapos, na hindi pa gawin ang nanlilinlang. 673 00:41:07,900 --> 00:41:11,340 Dahil kung ano ang mangyayari kapag mayroon ka ng isang file sa iyong hard drive 674 00:41:11,340 --> 00:41:14,590 na kumakatawan sa ilang mga dokumento na salita o ilang JPEG? 675 00:41:14,590 --> 00:41:18,820 At ito ay kumakatawan sa iyong hard drive, at sabihin nating ito salubsob dito ay kumakatawan sa file na iyon, 676 00:41:18,820 --> 00:41:21,640 at ito ay binubuo ng isang buong grupo ng 0 at 1 ay. 677 00:41:21,640 --> 00:41:25,470 Ano ang mangyayari kapag hindi mo lamang i-drag ang file na iyon sa trashcan o recycle bin, 678 00:41:25,470 --> 00:41:30,390 ngunit din alisan ng laman ang mga ito? 679 00:41:30,390 --> 00:41:32,820 Pagsunud-sunurin ng walang. Ito ay hindi ganap na walang ngayon. 680 00:41:32,820 --> 00:41:37,630 Ngayon lang wala, dahil ang isang maliit na isang bagay na mangyayari sa paraan ng table na ito. 681 00:41:37,630 --> 00:41:41,170 Kaya may ilang mga uri ng database o talahanayan sa loob ng memorya ng isang computer 682 00:41:41,170 --> 00:41:44,470 na mahalagang may 1 pangalan ng hanay para sa mga file, 683 00:41:44,470 --> 00:41:50,550 at 1 haligi para sa lokasyon ng file, kung saan maaaring ito ay ang lokasyon 123, lamang ng random na numero. 684 00:41:50,550 --> 00:41:58,270 Kaya maaari naming magkaroon ng isang bagay tulad ng x.jpg, at lokasyon 123. 685 00:41:58,270 --> 00:42:02,870 At ano ang mangyayari pagkatapos, kapag alisan ng laman mo ang iyong basura? 686 00:42:02,870 --> 00:42:06,720 Na mawala. Ngunit ano ay hindi umalis ang 0 at 1 ay. 687 00:42:06,720 --> 00:42:09,690 >> Kaya kung ano ang, pagkatapos, ang koneksyon sa pset 4? 688 00:42:09,690 --> 00:42:13,460 Well, may pset 4, dahil aksidenteng namin na mabubura 689 00:42:13,460 --> 00:42:15,890 compact flash card na mayroon ang lahat ng mga larawan na ito, 690 00:42:15,890 --> 00:42:18,710 o dahil lang sa ito sa pamamagitan ng alat naging Nasira, 691 00:42:18,710 --> 00:42:21,170 ay hindi nangangahulugan na ang 0 at 1 ay hindi pa rin doon. 692 00:42:21,170 --> 00:42:23,920 Siguro ang ilan sa mga ito ay nawala dahil isang bagay Nakakuha Nasira 693 00:42:23,920 --> 00:42:26,530 sa kamalayan na ilang 0 sa naging 1 at 1 sa naging 0 na. 694 00:42:26,530 --> 00:42:30,460 Bad bagay ay maaaring mangyari dahil sa maraming surot software o depekto hardware. 695 00:42:30,460 --> 00:42:33,510 Ngunit maraming ng mga bit, marahil kahit na 100% ng mga ito ay pa rin doon, 696 00:42:33,510 --> 00:42:38,330 lang na ang computer o ang camera ay hindi alam kung saan JPEG 1 nagsimula 697 00:42:38,330 --> 00:42:41,660 at kung saan nagsimula JPEG 2, ngunit kung, programmer, 698 00:42:41,660 --> 00:42:45,800 alam mo na, na may isang bit ng savvy, kung saan ang mga JPEG na o kung ano ang tumingin sila tulad ng, 699 00:42:45,800 --> 00:42:49,570 maaari mong pag-aralan ang 0 at 1 at sabihin, 'Ooh. JPEG. Ooh, JPEG. ' 700 00:42:49,570 --> 00:42:52,830 Maaari kang magsulat ng isang programa na may mahalagang lamang para sa o habang loop 701 00:42:52,830 --> 00:42:56,100 na recovers bawat isa sa mga file. 702 00:42:56,100 --> 00:42:59,360 Kaya aralin pagkatapos, ay upang simulan ang "secure" binubura ang iyong mga file 703 00:42:59,360 --> 00:43:01,720 kung nais mong upang maiwasan ang kabuuan. Oo? 704 00:43:01,720 --> 00:43:06,940 [Estudyante tanong, hindi maintindihan] 705 00:43:06,940 --> 00:43:11,150 >> Mayroong higit pang memory kaysa ginawa mo dati - 706 00:43:11,150 --> 00:43:14,790 Oh! Magandang tanong. Kaya bakit, pagkatapos, pagkatapos tinatanggalan ng laman ang trash, 707 00:43:14,790 --> 00:43:18,300 ang iyong computer sabihin sa iyo na mayroon kang higit libreng espasyo kaysa ginawa mo dati? 708 00:43:18,300 --> 00:43:22,450 Sa maikling sabi, dahil ito namamalagi. Mas technically, mo ay may mas maraming espasyo. 709 00:43:22,450 --> 00:43:26,720 Dahil ngayon mo na sinabi, maaari mong ilagay ang iba pang mga bagay-bagay na kung saan ang file na sabay-sabay ay, 710 00:43:26,720 --> 00:43:28,930 ngunit na ay hindi nangangahulugan na ang mga bits ay mawawala, 711 00:43:28,930 --> 00:43:33,070 at na ay hindi nangangahulugan na ang mga bits ay Binago ang lahat ng 0 sa, halimbawa, para sa iyong proteksyon. 712 00:43:33,070 --> 00:43:37,520 Sa pamamagitan ng kaibahan, kung ikaw "secure" burahin mga file, o pisikal na sirain ang aparato, 713 00:43:37,520 --> 00:43:40,810 na talagang ay ang tanging paraan, minsan, sa paligid na. 714 00:43:40,810 --> 00:43:45,300 Kaya bakit hindi namin umalis sa na semi-nakakatakot na tala, at kami ay nakikita mo sa Lunes. 715 00:43:45,300 --> 00:43:52,810 CS50.TV