1 00:00:00,000 --> 00:00:02,860 [Powered by Google Translate] [Недела 5] 2 00:00:02,860 --> 00:00:04,860 [Дејвид Џ Malan - Универзитетот Харвард] 3 00:00:04,860 --> 00:00:07,260 [Ова е CS50. - CS50.TV] 4 00:00:07,260 --> 00:00:09,740 >> Ова е CS50, Недела 5. 5 00:00:09,740 --> 00:00:12,900 Денес и оваа недела, ќе се воведат малку во светот на криминолошки науки 6 00:00:12,900 --> 00:00:14,850 во контекст на проблемот Намести 4. 7 00:00:14,850 --> 00:00:18,480 Денес ќе биде скратен предавање бидејќи има посебен настан овде потоа. 8 00:00:18,480 --> 00:00:21,940 Па ние ќе се погледнеме и душманке и учениците и родителите, така и денес 9 00:00:21,940 --> 00:00:24,600 со некои од работите кои се на хоризонтот. 10 00:00:24,600 --> 00:00:29,050 >> Меѓу нив, од понеделник, ќе имате уште неколку соученици. 11 00:00:29,050 --> 00:00:32,980 edx, Харвард и нови МИТ онлајн иницијатива за OpenCourseWare и повеќе, 12 00:00:32,980 --> 00:00:36,730 е подигнувањето на кампусот на Харвард во понеделникот, што значи дојде понеделник 13 00:00:36,730 --> 00:00:40,930 ќе мора, како на последно брои, 86.000 дополнителни соученици 14 00:00:40,930 --> 00:00:43,680 кои ќе бидат следниве заедно со предавања CS50 и делови 15 00:00:43,680 --> 00:00:45,890 и walkthroughs и проблемот комплети. 16 00:00:45,890 --> 00:00:51,870 И како дел од ова, ќе станат членки на инаугуративната класа на CS50 и сега CS50x. 17 00:00:51,870 --> 00:00:56,150 Како дел од овој сега, свесни дека ќе има некои квит, како и. 18 00:00:56,150 --> 00:01:00,620 Да се ​​подготвени за тоа, за голем број на студенти, 19 00:01:00,620 --> 00:01:03,820 доволно е да се каже дека иако имаме 108 TFS и CAS, 20 00:01:03,820 --> 00:01:07,560 тоа не е сосема најдобар студент-наставник сооднос еднаш сме го погоди 80.000 на студентите. 21 00:01:07,560 --> 00:01:09,830 Ние нема да се оценување толку многу проблем поставува рачно, 22 00:01:09,830 --> 00:01:13,050 така воведе оваа недела во проблемот собата ќе биде CS50 Проверете, 23 00:01:13,050 --> 00:01:15,410 која ќе биде командната линија за комунални услуги во рамките на апаратот 24 00:01:15,410 --> 00:01:17,880 дека ќе добиете откако ќе го ажурирате подоцна овој викенд. 25 00:01:17,880 --> 00:01:21,030 Вие ќе бидете во можност да извршите команда, check50, на свој pset, 26 00:01:21,030 --> 00:01:24,770 и ќе добиете инстант фидбек за тоа дали вашата програма е точно или неточно 27 00:01:24,770 --> 00:01:27,980 според различни спецификации за дизајнот што се предвидени. 28 00:01:27,980 --> 00:01:30,310 Повеќе за тоа во проблемот сет спецификација. 29 00:01:30,310 --> 00:01:34,220 На CS50x соученици ќе биде со користење на овој, како и. 30 00:01:34,220 --> 00:01:36,170 >> Проблемот Постави 4 е за сите криминолошки науки, 31 00:01:36,170 --> 00:01:38,630 и ова pset беше навистина инспириран од некои реални нешта 32 00:01:38,630 --> 00:01:41,210 при што кога бев во Факултетот јас интерниран за време 33 00:01:41,210 --> 00:01:45,270 со канцеларија Окружниот обвинител Middlesex Каунти проади форензичар работа 34 00:01:45,270 --> 00:01:47,660 со олово форензичар иследник. 35 00:01:47,660 --> 00:01:50,280 Што ова изнесуваат, како што мислам јас спомнав неколку недели минатото, 36 00:01:50,280 --> 00:01:52,720 е масата државна полиција или други ќе дојдат, 37 00:01:52,720 --> 00:01:56,150 тие ќе заспивам работи како хард дискови и CD-а и флопи дискови и слично, 38 00:01:56,150 --> 00:01:58,770 а потоа целта на криминолошки науки канцеларија беше да се утврди 39 00:01:58,770 --> 00:02:01,470 дали имало или не беше доказ на некој вид. 40 00:02:01,470 --> 00:02:04,730 Ова беше специјални истраги единица, па тоа беше чиновнически криминал. 41 00:02:04,730 --> 00:02:10,949 Тоа беше повеќе вознемирувачки вид на кривични дела, ништо вклучуваат некој вид на дигиталните медиуми. 42 00:02:10,949 --> 00:02:16,450 Излегува дека не дека многу луѓе пишуваат е-маил велејќи: "Дали јас тоа." 43 00:02:16,450 --> 00:02:20,490 Па доста често, овие форензичар пребарувања не се претвори до сите дека многу овошје, 44 00:02:20,490 --> 00:02:22,820 но понекогаш луѓето ќе пишуваат такви пораки. 45 00:02:22,820 --> 00:02:25,240 Па понекогаш, напорите беа наградени. 46 00:02:25,240 --> 00:02:31,210 >> Но да се доведе до оваа судска pset, ќе биде воведување во pset4 малку графика. 47 00:02:31,210 --> 00:02:35,410 Вие веројатно се овие работи здраво за готово - JPEG слики, GIFs, и слично - овие денови. 48 00:02:35,410 --> 00:02:38,320 Но, ако навистина мислиш за тоа, слика, слично како лице на Rob, 49 00:02:38,320 --> 00:02:41,270 може да се моделираат како секвенца од точките или пиксели. 50 00:02:41,270 --> 00:02:43,380 Во случај на лице Роб, има сите видови на бои, 51 00:02:43,380 --> 00:02:46,760 и почнавме да ја видите поединечни точки, инаку позната како пиксели, 52 00:02:46,760 --> 00:02:48,610 еднаш почнавме да зумирате внатре 53 00:02:48,610 --> 00:02:54,660 Но, ако ги поедностави светот малку и само велат дека ова тука е Роб во црно и бело, 54 00:02:54,660 --> 00:02:57,490 да претставуваат црно и бело, ние само може да се користи бинарни. 55 00:02:57,490 --> 00:03:01,660 И ако ние се случува да се користи бинарни, 1 или 0, можеме да ги изразат оваа иста слика 56 00:03:01,660 --> 00:03:06,140 на насмеано лице Rob со овој модел на битови. 57 00:03:06,140 --> 00:03:12,100 11000011 претставува бела, бела, црна, црна, црна, црна, бела, бела. 58 00:03:12,100 --> 00:03:16,150 И така тоа не е огромен скок потоа да почнам да зборувам за шарени фотографии, 59 00:03:16,150 --> 00:03:18,600 работи што ќе видите на Фејсбук или се со дигитална камера. 60 00:03:18,600 --> 00:03:21,410 Но секако кога станува збор за боите, ви треба повеќе битови. 61 00:03:21,410 --> 00:03:25,690 И доста честа појава во светот на фотографии е да се користи не 1-bit-на боја, 62 00:03:25,690 --> 00:03:29,560 како ова сугерира, но 24-битна боја, каде што всушност милиони бои. 63 00:03:29,560 --> 00:03:32,250 Така што кога ќе зумира во на око на Rob во случајот, 64 00:03:32,250 --> 00:03:36,370 тоа беше било кој број на милиони различни шарени можности. 65 00:03:36,370 --> 00:03:39,040 Па ние ќе се воведе ова Проблем Постави 4, како и во Walkthrough, 66 00:03:39,040 --> 00:03:43,370 кој ќе биде денес во 03:30 наместо вообичаените 02:30 поради предавање во петокот тука. 67 00:03:43,370 --> 00:03:46,620 Но, видеото ќе биде онлајн, како и обично утре. 68 00:03:46,620 --> 00:03:48,820 >> Ние исто така ќе ве запознаам со друг формат на датотека. 69 00:03:48,820 --> 00:03:51,270 Ова е намерно со цел да изгледа застрашувачки на прв, 70 00:03:51,270 --> 00:03:55,670 но ова е само некоја документација за struct Ц. 71 00:03:55,670 --> 00:03:58,940 Излегува дека Мајкрософт години помогна во промовирањето на овој формат 72 00:03:58,940 --> 00:04:05,150 наречен bitmap формат на датотека, BMP, и тоа беше супер едноставна, шарени графички формат на датотека 73 00:04:05,150 --> 00:04:10,150 која била искористена за сосема извесно време, а понекогаш уште за позадини за десктоп компјутерите. 74 00:04:10,150 --> 00:04:14,760 Ако мислите назад на Windows XP и ридови и сино небо, 75 00:04:14,760 --> 00:04:17,170 тоа беше обично BMP или bitmap слика. 76 00:04:17,170 --> 00:04:19,959 Bitmaps се забава за нас, бидејќи тие имаат малку повеќе комплексност. 77 00:04:19,959 --> 00:04:22,610 Тоа не е толку едноставно како ова решетка од 0-ти и 1S. 78 00:04:22,610 --> 00:04:27,510 Наместо тоа, имаш работи како насловот на почетокот на датотека. 79 00:04:27,510 --> 00:04:31,990 Значи со други зборови, во внатрешноста на. BMP датотека е целиот куп на 0-ти и 1S, 80 00:04:31,990 --> 00:04:34,910 но има некои дополнителни 0-ти и 1S во таму. 81 00:04:34,910 --> 00:04:38,220 И излегува дека она што веројатно зема здраво за готово со години - 82 00:04:38,220 --> 00:04:45,170 формати на датотеки како. doc или. xls или. mp3,. Mp4, без оглед на формати на датотеки 83 00:04:45,170 --> 00:04:48,480 дека сте запознаени со - што значи дека дури и значи да се биде формат на датотека, 84 00:04:48,480 --> 00:04:52,480 бидејќи на крајот на денот сите овие датотеки ние ги користиме имаат само 0-ти и 1S. 85 00:04:52,480 --> 00:04:56,810 А можеби и оние 0-ти и 1S претставуваат АБЦ преку ASCII или слично, 86 00:04:56,810 --> 00:04:58,820 но на крајот на денот, тоа е сепак само 0-ти и 1S. 87 00:04:58,820 --> 00:05:02,100 Значи луѓето само повремено одлучи да измисли нов формат на датотека 88 00:05:02,100 --> 00:05:06,420 каде што се стандардизира какви модели на битови, всушност, ќе значи. 89 00:05:06,420 --> 00:05:09,220 И во овој случај тука, на луѓе кои дизајниран bitmap формат на датотека 90 00:05:09,220 --> 00:05:15,620 рече дека во првиот бајт во битмапа датотеки, како означува со офсет 0 таму, 91 00:05:15,620 --> 00:05:18,940 таму ќе бидат некои cryptically име променлива наречена bfType, 92 00:05:18,940 --> 00:05:23,080 кои само се залага за bitmap тип на датотека, каков вид на bitmap датотека е ова. 93 00:05:23,080 --> 00:05:27,700 Можете да заклучиме можеби од вториот ред што офсет 2, бајт број 2, 94 00:05:27,700 --> 00:05:33,740 има модел на 0-ти и 1S кој претставува она? Големината на нешто. 95 00:05:33,740 --> 00:05:35,310 И тоа оди од таму. 96 00:05:35,310 --> 00:05:37,410 Значи во Проблем Постави 4, ќе се одеше преку некои од овие работи. 97 00:05:37,410 --> 00:05:39,520 Ние нема да заврши се грижат за сите нив. 98 00:05:39,520 --> 00:05:47,510 Но забележите тоа ќе почне да се интересни околу бајт 54: rgbtBlue, зелена и црвена. 99 00:05:47,510 --> 00:05:52,110 Ако некогаш сте слушнале акроним RGB - црвена, зелена, сина - ова е референца за таа 100 00:05:52,110 --> 00:05:54,610 бидејќи излегува дека може да наслика сите бои на виножитото 101 00:05:54,610 --> 00:05:58,180 со некоја комбинација од сина и црвена и зелена боја. 102 00:05:58,180 --> 00:06:03,320 И всушност, родителите во собата може да се потсетиме на некои од најраните проектори. 103 00:06:03,320 --> 00:06:05,890 Овие денови, само види еден светлина излегува од леќа, 104 00:06:05,890 --> 00:06:09,800 но назад во текот на денот сте имале црвена леќа, сини леќи, и зелени леќа, 105 00:06:09,800 --> 00:06:13,380 и заедно со цел екран и формираше шарени сликата. 106 00:06:13,380 --> 00:06:16,270 И доста често, средните училишта и средните училишта ќе имаат оние леќи 107 00:06:16,270 --> 00:06:19,720 некогаш толку малку askew, па сте биле вид на гледање двоен или троен слики. 108 00:06:19,720 --> 00:06:24,100 Но, тоа беше идејата. Сте имале црвена и зелена и сина светлина сликарство слика. 109 00:06:24,100 --> 00:06:26,590 И дека истиот принцип се користи во компјутерите. 110 00:06:26,590 --> 00:06:30,230 >> Значи меѓу предизвици тогаш за вас во Проблем Постави 4 ќе бидат неколку работи. 111 00:06:30,230 --> 00:06:34,800 Една од нив е да се всушност промените големината на сликата, да се земе во модел на 0-ти и 1S, 112 00:06:34,800 --> 00:06:40,200 дознаам што делови од 0-ти и 1S претставуваат она што во структурата како оваа, 113 00:06:40,200 --> 00:06:43,630 а потоа дознаам како да се реплицираат во пиксели - на црвена, блуз, зелена - 114 00:06:43,630 --> 00:06:46,660 внатре, така што кога сликата изгледа вака на почетокот, 115 00:06:46,660 --> 00:06:49,210 тоа може да изгледа вака наместо после тоа. 116 00:06:49,210 --> 00:06:53,640 Меѓу другите предизвици премногу ќе биде дека ќе им бидат предадени на судските сликата 117 00:06:53,640 --> 00:06:56,030 на вистински датотека од дигитален фото апарат. 118 00:06:56,030 --> 00:06:58,960 И на тој апарат, еднаш многу одамна, беа еден куп фотографии. 119 00:06:58,960 --> 00:07:03,760 Проблемот е што случајно избришани или имале сликата расипана некако. 120 00:07:03,760 --> 00:07:05,750 Лоши работи се случуваат со дигитални камери. 121 00:07:05,750 --> 00:07:09,150 И така ние брзо копирани сите на 0-ти и 1S на тој картичка за вас, 122 00:07:09,150 --> 00:07:13,610 спаси сите нив во една голема датотека, а потоа ќе ги предаде на вас во Проблем Намести 4 123 00:07:13,610 --> 00:07:19,320 така што можете да напишете програма во C со што да се опорави сите оние JPEG слики, идеално. 124 00:07:19,320 --> 00:07:23,330 И излегува дека JPEG слики, иако тие се малку на комплексни формат на датотека - 125 00:07:23,330 --> 00:07:26,360 тие се многу посложени од тоа насмеано лице тука - 126 00:07:26,360 --> 00:07:31,160 излегува дека секој JPEG започнува со истите модели на 0-ти и 1S. 127 00:07:31,160 --> 00:07:35,630 Значи со користење, во крајна линија, додека јамка или за телефонска линија или слично, 128 00:07:35,630 --> 00:07:38,880 можете да iterate во текот на сите 0-ти и 1S во овој форензички слика, 129 00:07:38,880 --> 00:07:43,150 и секој пат кога ќе видите специјална шема, која е дефинирана во проблемот сет спецификација, 130 00:07:43,150 --> 00:07:47,880 може да се претпостави тука е, со многу голема веројатност, на почетокот на JPEG. 131 00:07:47,880 --> 00:07:51,230 И веднаш штом ќе ги најдете на иста шема одреден број на бајти 132 00:07:51,230 --> 00:07:55,430 или kilobytes или мегабајти подоцна, може да се претпостави тука е втората JPEG, 133 00:07:55,430 --> 00:07:57,380 слика отидов по првиот. 134 00:07:57,380 --> 00:08:01,370 Дозволете ми да престане читањето дека првиот фајл, почнете со пишување на овој нов, 135 00:08:01,370 --> 00:08:06,310 и излез на вашата програма за pset4 ќе биде колку што 50 JPEG слики. 136 00:08:06,310 --> 00:08:09,270 И ако тоа не е 50 JPEG слики, имате малку на јамка. 137 00:08:09,270 --> 00:08:12,490 Ако имате неограничен број на JPEG слики, имаш бесконечна јамка. 138 00:08:12,490 --> 00:08:14,910 Така што исто така ќе биде доста чест случај. 139 00:08:14,910 --> 00:08:16,600 Значи тоа е она што е на хоризонтот. 140 00:08:16,600 --> 00:08:21,310 >> Квиз 0 зад нас, свесни за мојата е-маил дека секогаш постојат луѓе кои се истовремено среќни, 141 00:08:21,310 --> 00:08:23,640 вид на неутрални и тажни околу квиз 0 време. 142 00:08:23,640 --> 00:08:26,800 И немојте да допрат до мене, шеф ТФ Zamyla, свој ТФ, 143 00:08:26,800 --> 00:08:31,180 или еден од Кас дека знаете ако би сакале да разговараат за тоа како се одвиваа работите. 144 00:08:31,180 --> 00:08:35,539 >> Така да импресионира родители тука во соба, што е CS50 библиотека? 145 00:08:36,429 --> 00:08:40,390 [Смеа] Добра работа. 146 00:08:40,390 --> 00:08:48,340 Што е CS50 библиотека? Да. >> [Студент] Тоа е претходна писмена сет на кодот [недоловим] 147 00:08:48,340 --> 00:08:49,750 Океј, добро. 148 00:08:49,750 --> 00:08:53,240 Тоа е претходна писмена сет на кодот кој ние персоналот напиша, ние обезбеди за вас, 149 00:08:53,240 --> 00:08:55,030 која обезбедува некои заеднички функционалност, 150 00:08:55,030 --> 00:08:59,020 работи како мене да добијат низа, се ме int - сите функции кои се наведени тука. 151 00:08:59,020 --> 00:09:02,260 >> Почнувајќи од сега, ние почнуваме да навистина се овие обука тркала надвор. 152 00:09:02,260 --> 00:09:05,050 Ние ќе почне да се земе низа од вас, 153 00:09:05,050 --> 00:09:08,870 кој се потсетиме беше само синоним за каков тип на податоци? >> [Повеќе студенти] char *. 154 00:09:08,870 --> 00:09:12,730 Char *. За родителите, кои веројатно беше [прави whooshing звук]. Тоа е добро. 155 00:09:12,730 --> 00:09:17,550 Char * ние ќе почнете да гледате на екранот сè повеќе и повеќе како што ние ги отстрани низа од нашиот речник, 156 00:09:17,550 --> 00:09:19,730 барем кога станува збор за навистина пишување на код. 157 00:09:19,730 --> 00:09:22,840 Слично на тоа, ние ќе престане да го користи некои од овие функции колку 158 00:09:22,840 --> 00:09:25,280 бидејќи нашите програми се случува да добиете повеќе софистицирани. 159 00:09:25,280 --> 00:09:28,480 Наместо само пишуваат програми кои седат таму со брза трепка, 160 00:09:28,480 --> 00:09:31,870 чекање за корисникот да напишеш нешто, ќе ја добиете вашата влезови од друго место. 161 00:09:31,870 --> 00:09:35,490 На пример, ќе ги добиете од серија на битови на локален хард диск. 162 00:09:35,490 --> 00:09:38,580 Ти наместо ќе ги добие во иднина од некоја мрежна конекција, 163 00:09:38,580 --> 00:09:40,230 некои веб некаде. 164 00:09:40,230 --> 00:09:44,110 >> Значи, да лупам назад овој слој за прв пат и се повлече до CS50 апарати 165 00:09:44,110 --> 00:09:49,010 и оваа датотека се нарекува cs50.h, кои сте биле # вклучувајќи недели, 166 00:09:49,010 --> 00:09:51,140 но ајде да всушност гледаат она што е внатре за тоа. 167 00:09:51,140 --> 00:09:54,430 На врвот на датотеката во плава е само еден куп коментари: 168 00:09:54,430 --> 00:09:57,050 гаранција информации и лиценцирање. 169 00:09:57,050 --> 00:09:59,050 Ова е вид на заедничка парадигма во софтвер 170 00:09:59,050 --> 00:10:01,580 бидејќи многу софтвер овие денови е она што се нарекува софтвер со отворен код, 171 00:10:01,580 --> 00:10:05,220 што значи дека некој има напишано на кодот и го направи слободно достапни 172 00:10:05,220 --> 00:10:10,470 не само да се кандидира и да се користи, но за да всушност читање и менување и да се интегрираат во својата работа. 173 00:10:10,470 --> 00:10:14,660 Значи тоа е она што сте биле користење на софтвер со отворен код, иако во многу мала форма. 174 00:10:14,660 --> 00:10:18,560 Ако јас дојдете минатото на коментарите, сепак, ќе почнете да видите некои повеќе познати работи. 175 00:10:18,560 --> 00:10:25,010 Известување на врвот тука дека датотеката cs50.h вклучува целиот куп на насловот датотеки. 176 00:10:25,010 --> 00:10:28,560 Повеќето од овие, не сме виделе порано, но едно е познато. 177 00:10:28,560 --> 00:10:32,270 Која од овие сме виделе, иако кратко, досега? >> [Студент] Стандардна библиотека. 178 00:10:32,270 --> 00:10:35,810 Да, стандардната библиотека. stdlib.h има Примерок. 179 00:10:35,810 --> 00:10:38,320 Откако почнавме да зборуваме за динамичка меморија распределба, 180 00:10:38,320 --> 00:10:41,650 која ќе се врати на следната недела, како и, почнавме вклучувајќи таа датотека. 181 00:10:41,650 --> 00:10:46,640 Излегува дека bool и вистински и лажни всушност не постои во C по себе 182 00:10:46,640 --> 00:10:49,440 освен ако не се вклучи оваа датотека тука. 183 00:10:49,440 --> 00:10:52,710 Ние сме со недели е вклучувајќи stdbool.h 184 00:10:52,710 --> 00:10:55,620 така што можете да го користите идејата за bool, точно или неточно. 185 00:10:55,620 --> 00:10:58,620 Без ова, вие ќе треба да се најде на лажни и користете int 186 00:10:58,620 --> 00:11:02,610 и само произволно да се претпостави дека 0 е лажна и 1 е вистина. 187 00:11:02,610 --> 00:11:07,150 Ако ние движете надолу понатаму, тука е нашата дефиниција на стринг. 188 00:11:07,150 --> 00:11:11,390 Излегува, како што рековме порано, дека таму каде што оваа ѕвезда е не е важно. 189 00:11:11,390 --> 00:11:13,720 Можете дури и да имаат простор наоколу. 190 00:11:13,720 --> 00:11:16,740 Ние овој семестар се го промовира како ова да го направи јасно 191 00:11:16,740 --> 00:11:18,620 дека ѕвездата има врска со видот, 192 00:11:18,620 --> 00:11:21,700 но сфати само како заеднички, ако не и малку повеќе заеднички, 193 00:11:21,700 --> 00:11:24,430 е да го оставиме таму, но функционално тоа е иста работа. 194 00:11:24,430 --> 00:11:27,720 Но, сега, ако читаме долу понатаму, ајде да ги разгледаме во GetInt 195 00:11:27,720 --> 00:11:32,190 бидејќи ние се користи дека можеби прво, пред било што друго овој семестар. 196 00:11:32,190 --> 00:11:37,440 Тука е GetInt. Тоа е она? >> [Студент] А прототип. >> Ова е само прототип. 197 00:11:37,440 --> 00:11:41,410 Често, имаме стави прототипи на врвот на нашата. В датотеки, 198 00:11:41,410 --> 00:11:46,690 но вие исто така може да се стави прототипови во насловот датотеки. ж датотеки, како овој овде 199 00:11:46,690 --> 00:11:50,840 така што кога ќе напишам некои функции кои сакате другите луѓе да бидат во можност да ги користат, 200 00:11:50,840 --> 00:11:53,550 која е токму случајот со библиотеката CS50, 201 00:11:53,550 --> 00:11:57,040 вие не само спроведување на вашиот функции во нешто како cs50.c, 202 00:11:57,040 --> 00:12:02,790 исто така, се стави на прототипови не на врвот на таа датотека, но на врвот на хедер датотека. 203 00:12:02,790 --> 00:12:07,170 Тогаш тоа хедер датотека е она пријатели и колеги вклучуваат 204 00:12:07,170 --> 00:12:09,760 со # вклучат во нивните сопствени код. 205 00:12:09,760 --> 00:12:12,210 Значи сето ова време, сте биле вклучувајќи ги и сите на овие прототипови, 206 00:12:12,210 --> 00:12:16,580 ефикасно на врвот на вашата датотека, но на начин на овој # include механизам, 207 00:12:16,580 --> 00:12:20,070 што во суштина копии и пасти оваа датотека во вашиот сопствен. 208 00:12:20,070 --> 00:12:23,070 Еве некои прилично детални документација. 209 00:12:23,070 --> 00:12:25,640 Ние сме доста зема здраво за готово дека GetInt добива int, 210 00:12:25,640 --> 00:12:27,640 но излегува постојат некои агол случаи. 211 00:12:27,640 --> 00:12:31,810 Што се случува ако корисник видови во број кој е премногу голем, а quintillion, 212 00:12:31,810 --> 00:12:35,490 дека едноставно не може да се вклопи во внатрешноста на int? Кое е очекуваното однесување? 213 00:12:35,490 --> 00:12:38,020 Идеално, тоа е предвидлив. 214 00:12:38,020 --> 00:12:40,280 Значи во овој случај, ако навистина го прочитате парична казна печати, 215 00:12:40,280 --> 00:12:44,500 вие всушност ќе се види дека ако линијата не може да се чита, тоа се враќа INT_MAX. 216 00:12:44,500 --> 00:12:48,320 Ние никогаш не сум зборуваше за ова, но врз основа на неговата капитализација, што е веројатно? 217 00:12:48,320 --> 00:12:50,640 [Студент] константа. >> Тоа е постојана. 218 00:12:50,640 --> 00:12:54,770 Тоа е некои посебни константа што е веројатно прогласен во еден од оние насловот датотеки 219 00:12:54,770 --> 00:13:00,090 тоа е до повисоко во датотека, а INT_MAX е веројатно нешто како речиси 2 милијарди долари, 220 00:13:00,090 --> 00:13:04,990 Идејата е дека бидејќи ние мораме некако да значи дека нешто не беше во ред, 221 00:13:04,990 --> 00:13:10,700 ние, да, има 4 милијарди броеви на располагање: -2 милијарди до 2 милијарди долари, или дава да потрае. 222 00:13:10,700 --> 00:13:14,710 Па, што е честа појава во програмирање е да украдат само еден од тие бројки, 223 00:13:14,710 --> 00:13:18,920 Можеби 0, можеби 2 милијарди, можеби -2000000000, 224 00:13:18,920 --> 00:13:23,280 така да поминат една од вашите можни вредности, така што ќе можат да се посветат на светот 225 00:13:23,280 --> 00:13:26,820 дека ако нешто тргне наопаку, ќе се вратам оваа супер голема вредност. 226 00:13:26,820 --> 00:13:31,030 Но, вие не сакате на корисникот пишување нешто криптичната како 234 ..., навистина голем број. 227 00:13:31,030 --> 00:13:34,060 Можете да го генерализира, наместо како константа. 228 00:13:34,060 --> 00:13:38,060 Значи, навистина, ако сте биле тоа анален изминатите неколку недели, во секое време да те повика GetInt, 229 00:13:38,060 --> 00:13:42,900 треба да се проверува со ако состојбата не на корисникот тип во INT_MAX, 230 00:13:42,900 --> 00:13:46,590 или, поточно, не GetInt враќање INT_MAX, затоа што ако тоа го правеше, 231 00:13:46,590 --> 00:13:51,830 што всушност значи дека тие не го напишеш. Нешто не беше во ред во овој случај. 232 00:13:51,830 --> 00:13:56,080 Значи тоа е она што е општо познато како стража вредност, која едноставно значи посебно. 233 00:13:56,080 --> 00:13:58,120 >> Ајде сега се претвори во. В датотека. 234 00:13:58,120 --> 00:14:01,340 На датотеката C постои во апаратот за некое време. 235 00:14:01,340 --> 00:14:06,840 И всушност, апаратот го има пред-состави за вас во тоа нешто што се нарекува објектен код, 236 00:14:06,840 --> 00:14:09,540 но тоа едноставно не е важно за вас, каде што тоа е затоа што системот знае 237 00:14:09,540 --> 00:14:11,730 во овој случај каде што е: апаратот. 238 00:14:11,730 --> 00:14:17,400 Ајде да дојдете долу сега да GetInt и да видиме како GetInt работи сето ова време. 239 00:14:17,400 --> 00:14:19,460 Тука имаме слични коментари од порано. 240 00:14:19,460 --> 00:14:21,660 Дозволете ми да зумирате на само кодот дел. 241 00:14:21,660 --> 00:14:23,900 И она што го имаме за GetInt е следниот. 242 00:14:23,900 --> 00:14:25,700 Таа ги зема нема влез. 243 00:14:25,700 --> 00:14:29,510 Го враќа int, додека (вистинска), па ние имаме намерно бесконечна јамка, 244 00:14:29,510 --> 00:14:33,180 но се претпоставува дека ќе се пробие на ова некако или да се вратат од рамките ова. 245 00:14:33,180 --> 00:14:34,870 >> Ајде да видиме како тоа функционира. 246 00:14:34,870 --> 00:14:39,240 Ние се чини дека да се користат GetString во оваа прва линија во внатрешноста на јамка, 166. 247 00:14:39,240 --> 00:14:43,780 Ова е сега добра практика, бидејќи под какви околности GetString може да се врати 248 00:14:43,780 --> 00:14:47,660 специјални клучни зборови NULL? >> [Студент] Ако нешто тргне наопаку. 249 00:14:47,660 --> 00:14:51,630 Ако нешто тргне наопаку. А што би можело да тргне наопаку кога ќе се јавите нешто како GetString? 250 00:14:54,960 --> 00:14:57,640 Да. >> [Студент] Примерок не успее да го даде ints. 251 00:14:57,640 --> 00:14:59,150 Да. Можеби Примерок не успее. 252 00:14:59,150 --> 00:15:03,190 Некаде под хауба, GetString повикува Примерок, која доделува меморија, 253 00:15:03,190 --> 00:15:06,020 кој им овозможува на компјутер продавница на сите ликови 254 00:15:06,020 --> 00:15:07,750 дека корисникот видови во тастатурата. 255 00:15:07,750 --> 00:15:11,590 И да претпоставиме на корисникот имаше едночудо на слободното време и внесе повеќе, на пример, 256 00:15:11,590 --> 00:15:16,160 од 2 милијарди карактери, повеќе ликови од компјутер дури има и RAM меморија. 257 00:15:16,160 --> 00:15:19,250 GetString мора да биде во можност да значи дека до вас. 258 00:15:19,250 --> 00:15:22,560 Дури и ако тоа е супер, супер е невообичаено агол случај, 259 00:15:22,560 --> 00:15:24,340 има некако да биде во можност да се справи со тоа, 260 00:15:24,340 --> 00:15:28,750 и така GetString, ако се вративме и да прочитате неговата документација, дали всушност се врати NULL. 261 00:15:28,750 --> 00:15:34,460 Па сега ако GetString не со враќање NULL, GetInt се случува да не успее со враќање INT_MAX 262 00:15:34,460 --> 00:15:37,690 само како стража. Овие се само човечките конвенции. 263 00:15:37,690 --> 00:15:41,450 Единствениот начин на кој ќе го знаеме и ова е случај е со читање на документација. 264 00:15:41,450 --> 00:15:45,040 >> Ајде да дојдете до каде int е всушност добиле. 265 00:15:45,040 --> 00:15:51,160 Ако јас движете надолу малку понатаму, во согласност 170, имаме коментар над овие линии. 266 00:15:51,160 --> 00:15:55,100 Изјавуваме во 172 е цел број, n, и знак, в, и потоа оваа нова функција, 267 00:15:55,100 --> 00:15:58,930 што некои од вас имате тетеравеше низ порано, sscanf. 268 00:15:58,930 --> 00:16:00,870 Ова се залага за низа Scanf. 269 00:16:00,870 --> 00:16:05,700 Со други зборови, дај ми низа и јас ќе го скенира за парчиња на информации од интерес. 270 00:16:05,700 --> 00:16:07,360 Што значи тоа? 271 00:16:07,360 --> 00:16:11,800 Да претпоставиме дека сум тип во буквално 123 на тастатура, а потоа притиснете ентер. 272 00:16:11,800 --> 00:16:16,470 Што е податоци за видот на 123 кога се вратија од GetString? >> [Студент] Стринг. 273 00:16:16,470 --> 00:16:18,380 Тоа е очигледно низа, нели? Добив стринг. 274 00:16:18,380 --> 00:16:23,220 Па 123 е навистина, цитат-unquote, 123 со \ 0 на крајот од неа. 275 00:16:23,220 --> 00:16:27,110 Тоа не е int. Тоа не е број. Тоа изгледа како број, но тоа не е всушност. 276 00:16:27,110 --> 00:16:29,080 Значи она што не GetInt треба да направите? 277 00:16:29,080 --> 00:16:35,750 Тоа мора да го скенира дека низа од лево кон десно - 123 \ 0 - и некако се претворат во вистински број. 278 00:16:35,750 --> 00:16:37,850 Вие би можеле да дознаам како да го направите тоа. 279 00:16:37,850 --> 00:16:41,450 Ако мислите назад кон pset2, можете веројатно добија малку удобно со Цезар 280 00:16:41,450 --> 00:16:44,820 или Vigenere, па можете да iterate во текот на еден стринг, можете да конвертирате карактери да ints. 281 00:16:44,820 --> 00:16:46,710 Но, подлец, тоа е многу скапо на работа. 282 00:16:46,710 --> 00:16:49,860 Зошто да не се јавите на функција како sscanf дека прави тоа за вас? 283 00:16:49,860 --> 00:16:54,230 Значи sscanf очекува аргумент - во овој случај се нарекува линија, која е стринг. 284 00:16:54,230 --> 00:17:01,840 Тогаш наведете во наводници, многу слични на printf, што очекувате да видите во овој стринг. 285 00:17:01,840 --> 00:17:09,000 И ова што го кажувам овде е што очекувам да ја видите децимален број, а можеби и карактер. 286 00:17:09,000 --> 00:17:12,000 И ќе видиме зошто ова е случај во само еден миг. 287 00:17:12,000 --> 00:17:15,869 И излегува дека оваа нотација е сега потсетува на нешто почнавме да зборуваме за 288 00:17:15,869 --> 00:17:17,619 нешто повеќе од пред една недела. 289 00:17:17,619 --> 00:17:21,740 Што е & n и и в прави за нас овде? >> [Студент] Обраќање на n и адреса на в. 290 00:17:21,740 --> 00:17:25,400 Да. Тоа ми даде адресата на n и адреса на в. Зошто е тоа важно? 291 00:17:25,400 --> 00:17:30,220 Вие знаете дека со функции во C, секогаш може да се врати на вредност или никаква вредност на сите. 292 00:17:30,220 --> 00:17:34,530 Можете да се врати int, стринг, плови, char, што, или може да се врати празнината, 293 00:17:34,530 --> 00:17:38,030 но вие само може да се врати една работа максимално. 294 00:17:38,030 --> 00:17:42,760 Но тука ние сакаме sscanf да ми се врати можеби еден цел број, децимален број, 295 00:17:42,760 --> 00:17:46,220 а исто така знак, и јас ќе објасни зошто знак во еден момент. 296 00:17:46,220 --> 00:17:51,460 Можете успешно сакате sscanf да се врати две работи, но тоа не е само можно во C. 297 00:17:51,460 --> 00:17:55,200 Можете да работите околу тоа со донесување во две адреси 298 00:17:55,200 --> 00:17:57,370 затоа што веднаш штом ќе предаде функцијата две адреси, 299 00:17:57,370 --> 00:18:00,470 она што може таа функција се направи со нив? >> [Студент] Напиши на оние адреси. 300 00:18:00,470 --> 00:18:02,010 Тоа може да напише на тие адреси. 301 00:18:02,010 --> 00:18:05,770 Можете да ги користите ѕвезда операцијата и да си одат таму, на секој од тие адреси. 302 00:18:05,770 --> 00:18:11,260 Тоа е еден вид на овој back-врата механизам, но многу честа појава за менување на вредностите на променливите 303 00:18:11,260 --> 00:18:14,870 повеќе од само едно место - во овој случај, две. 304 00:18:14,870 --> 00:18:21,340 Сега забележиш јас сум проверка за == 1, а потоа враќање n, ако тоа се случи, всушност, се оцени на true. 305 00:18:21,340 --> 00:18:26,170 Значи она што се случува? Технички, сите ние навистина сакаме да се случи во GetInt е ова. 306 00:18:26,170 --> 00:18:30,740 Ние сакаме да го анализирам, така да се каже, ние сакаме да го прочитате низа - цитат-unquote 123 - 307 00:18:30,740 --> 00:18:34,560 и ако изгледа има голем број таму, она што ние го кажувам sscanf да направите 308 00:18:34,560 --> 00:18:38,190 се стави тој број - 123 - во оваа променлива n за мене. 309 00:18:38,190 --> 00:18:42,090 Па зошто тогаш не сум всушност имаат тоа како добро? 310 00:18:42,090 --> 00:18:48,220 Која е улогата на sscanf велејќи дека, исто така, може да добијат карактер тука? 311 00:18:48,220 --> 00:18:53,470 [Нечујни студент одговор] >> децимална точка всушност би можеле да работат. 312 00:18:53,470 --> 00:18:56,330 Ајде да се одржи таа мисла за момент. Што друго? 313 00:18:56,330 --> 00:18:59,270 [Студент] Тоа може да биде NULL. >> Добра мисла. Тоа може да биде нула карактер. 314 00:18:59,270 --> 00:19:01,660 Тоа не е всушност во овој случај. Да. >> [Студент] ASCII. 315 00:19:01,660 --> 00:19:04,340 ASCII. Или дозволете ми да се генерализира дури и подалеку. 316 00:19:04,340 --> 00:19:06,640 На% c постои само за грешка проверка. 317 00:19:06,640 --> 00:19:09,300 Ние не сакаме да има карактер по број, 318 00:19:09,300 --> 00:19:11,870 но она што оваа ми дозволува да направите е следново. 319 00:19:11,870 --> 00:19:18,210 Излегува дека sscanf, покрај складирање вредности во n и в во овој пример тука, 320 00:19:18,210 --> 00:19:24,890 што исто така не е го враќа бројот на променливи го стави вредности внатре 321 00:19:24,890 --> 00:19:30,260 Значи, ако само напишете во 123, а потоа само% d ќе одговара, 322 00:19:30,260 --> 00:19:33,880 и само N добива чуваат со вредност како 123, 323 00:19:33,880 --> 00:19:35,640 и ништо не добива стави во в. 324 00:19:35,640 --> 00:19:37,620 Ц останува ѓубре вредност, така да се каже - 325 00:19:37,620 --> 00:19:40,730 ѓубре, бидејќи тоа никогаш не била иницијализирана за некои вредност. 326 00:19:40,730 --> 00:19:45,520 Значи во тој случај, sscanf враќа 1 затоа што населени 1 од тие совети, 327 00:19:45,520 --> 00:19:50,190 во кој случај одлично, имам int па јас ослободи линија за да се ослободи меморија 328 00:19:50,190 --> 00:19:54,000 дека GetString всушност распределени, а потоа ќе се вратам n, 329 00:19:54,000 --> 00:19:58,500 друго, ако некогаш сте се запрашале каде што Повторете изјава доаѓа од, доаѓа од овде. 330 00:19:58,500 --> 00:20:04,390 Значи, ако, пак, јас напишете 123foo - само некои случајна секвенца на текст - 331 00:20:04,390 --> 00:20:08,490 sscanf се случува да се види, број, број f, 332 00:20:08,490 --> 00:20:16,410 и тоа се случува да се стави на 123 во n; тоа се случува да се стави на f во в а потоа се врати 2. 333 00:20:16,410 --> 00:20:20,640 Значи имаме, само со користење на основните дефиниција на однесување sscanf, еден многу едноставен начин - 334 00:20:20,640 --> 00:20:23,900 добро, комплекс на прв поглед, но на крајот на денот прилично едноставен механизам - 335 00:20:23,900 --> 00:20:28,320 на велејќи дека е таму int и ако е така, е дека единственото нешто што најдов? 336 00:20:28,320 --> 00:20:29,860 И празни места тука е намерно. 337 00:20:29,860 --> 00:20:34,000 Ако го прочитате документацијата за sscanf, тоа ви кажува дека ако вклучуваат парче на празни места 338 00:20:34,000 --> 00:20:38,810 на почетокот или на крајот, sscanf исто така ќе им овозможи на корисникот, за која било причина, 339 00:20:38,810 --> 00:20:41,860 да се погоди простор бар 123 и дека ќе бидат легитимни. 340 00:20:41,860 --> 00:20:44,150 Вие нема да се развикам на корисникот само затоа што тие хит на просторот бар 341 00:20:44,150 --> 00:20:48,640 на почетокот или на крајот, што е само малку повеќе user-friendly. 342 00:20:48,640 --> 00:20:52,300 >> Било какви прашања тогаш GetInt? Да. >> [Студент] Што ако само се стави во знак? 343 00:20:52,300 --> 00:20:54,030 Добро прашање. 344 00:20:54,030 --> 00:20:59,890 Што ако само ја внеле во знак како f и притиснете ентер без воопшто да пишувате 123? 345 00:20:59,890 --> 00:21:02,420 Што мислите однесувањето на оваа линија код, тогаш ќе биде? 346 00:21:02,420 --> 00:21:04,730 [Нечујни студент одговор] 347 00:21:04,730 --> 00:21:08,790 Да, така sscanf може да ги покрие дека премногу, бидејќи во тој случај, тоа не се случува да се пополни n или в. 348 00:21:08,790 --> 00:21:15,310 Тоа се случува да наместо врати 0, во кој случај јас сум исто така, фаќање на тоа сценарио 349 00:21:15,310 --> 00:21:18,750 бидејќи очекуваната вредност што сакам е 1. 350 00:21:18,750 --> 00:21:22,000 Јас само сакам една и само една работа да бидат пополнети. Добро прашање. 351 00:21:22,000 --> 00:21:24,290 >> Другите? Во ред. 352 00:21:24,290 --> 00:21:26,250 >> Да не одиме низ сите функции во тука, 353 00:21:26,250 --> 00:21:29,500 но оној кој се чини дека можеби на останатите интерес е GetString 354 00:21:29,500 --> 00:21:32,790 бидејќи излегува дека GetFloat, GetInt, GetDouble, GetLongLong 355 00:21:32,790 --> 00:21:36,260 сите залог многу на нивната функционалност да GetString. 356 00:21:36,260 --> 00:21:39,750 Па ајде да ги разгледаме во тоа како тој се спроведува тука. 357 00:21:39,750 --> 00:21:43,630 Оваа една изгледа малку комплексна, но тоа го користи истиот основи 358 00:21:43,630 --> 00:21:45,670 што почнавме да зборуваме за минатата недела. 359 00:21:45,670 --> 00:21:49,490 Во GetString, кој се нема аргумент како на празнина се тука 360 00:21:49,490 --> 00:21:53,730 и враќа стринг, јас очигледно сум прогласување на низа наречен тампон. 361 00:21:53,730 --> 00:21:56,270 Јас навистина не знам што се случува да се користи за уште, но ќе видиме. 362 00:21:56,270 --> 00:21:58,390 Тоа изгледа како капацитет е стандардно 0. 363 00:21:58,390 --> 00:22:01,350 Не се сосема сигурни кога тоа се случува, не се сигурни што n се случува да се користи за уште, 364 00:22:01,350 --> 00:22:03,590 но сега тоа е добивање малку повеќе интересно. 365 00:22:03,590 --> 00:22:06,520 Во согласност 243, ние прогласи int, в. 366 00:22:06,520 --> 00:22:08,800 Ова е вид на глупави детали. 367 00:22:08,800 --> 00:22:15,820 А знак е 8 бита и 8 битови може да се сместат колку различни вредности? >> [Студент] 256. >> 256. 368 00:22:15,820 --> 00:22:20,730 Проблемот е ако сакате да имате 256 различни ASCII карактери, кои постојат 369 00:22:20,730 --> 00:22:23,340 ако мислите назад - и ова не е нешто да се запаметат. 370 00:22:23,340 --> 00:22:25,710 Но, ако се сетам на толку голема ASCII табелата имавме недели, 371 00:22:25,710 --> 00:22:30,600 имало во тој случај 128 или 256 ASCII карактери. 372 00:22:30,600 --> 00:22:32,940 Ние се користат сите модели на 0-ти и 1S нагоре. 373 00:22:32,940 --> 00:22:36,210 Тоа е проблем ако сакате да бидете во можност да детектира грешка 374 00:22:36,210 --> 00:22:40,190 затоа што ако веќе сте користење на 256 вредности за вашите карактери, 375 00:22:40,190 --> 00:22:43,050 не сте навистина се планира напред, бидејќи сега немаш начин да се каже, 376 00:22:43,050 --> 00:22:46,270 ова не е legit карактер, ова е некои погрешни порака. 377 00:22:46,270 --> 00:22:50,270 Значи она што на светот не е дека тие се користи следната најголема вредност, нешто како int, 378 00:22:50,270 --> 00:22:54,720 така што ќе имаат луда број на битови, 32, на 4 милијарди можни вредности 379 00:22:54,720 --> 00:22:58,860 така што можете едноставно да заврши со користење суштина 257 од нив, 380 00:22:58,860 --> 00:23:01,720 Од кои 1 има некои посебни значење како грешка. 381 00:23:01,720 --> 00:23:03,120 >> Да видиме како тоа функционира. 382 00:23:03,120 --> 00:23:07,760 Во согласност 246, имам овој голем додека јамка која се повикува fgetc, 383 00:23:07,760 --> 00:23:11,090 ѓ значење датотека, па getc, а потоа stdin. 384 00:23:11,090 --> 00:23:15,520 Излегува ова е само повеќе прецизен начин на велејќи прочитате влез од тастатура. 385 00:23:15,520 --> 00:23:19,300 Стандарден влез средства тастатура, стандарден излез значи екран, 386 00:23:19,300 --> 00:23:23,310 и стандардна грешка, што ќе видиме во pset4, значи на екранот 387 00:23:23,310 --> 00:23:27,490 но посебен дел на екранот, така што тоа не е измешано со вистински излез 388 00:23:27,490 --> 00:23:30,750 што сте имале намера да печати. Но повеќе за тоа во иднина. 389 00:23:30,750 --> 00:23:34,440 Значи fgetc само значи чита еден карактер од тастатура и складирање каде? 390 00:23:34,440 --> 00:23:37,350 Чувајте го во в. 391 00:23:37,350 --> 00:23:41,360 И потоа проверете - па јас сум само користење на некои Булова сврзници тука - 392 00:23:41,360 --> 00:23:46,000 проверете дали тоа не еднакви - \ n, така што корисникот има хит Enter, ние сакаме да се запре во тој момент, 393 00:23:46,000 --> 00:23:49,850 до крајот на циклусот - и ние исто така сакаме да се провери за специјални постојана EOF, 394 00:23:49,850 --> 00:23:53,610 што ако знаете или се погоди, она што не го штанд за? >> [Студент] Крајот на датотека. >> Крајот на датотеката. 395 00:23:53,610 --> 00:23:56,560 Ова е вид на бесмислени, бидејќи ако јас сум пишување на тастатура, 396 00:23:56,560 --> 00:23:58,870 има навистина нема датотеки се вклучени во овој, 397 00:23:58,870 --> 00:24:01,150 но ова е само вид на генерички термин кој се користи да значи 398 00:24:01,150 --> 00:24:04,220 дека ништо друго не доаѓа од прстите на човечкиот. 399 00:24:04,220 --> 00:24:06,460 EOF - крај на датотеката. 400 00:24:06,460 --> 00:24:09,920 Како настрана, ако некогаш сте хит контрола D во вашата тастатура, а не дека ќе имаат уште - 401 00:24:09,920 --> 00:24:15,230 Вие сте хит контрола C - Контрола D праќа оваа специјална постојана наречен EOF. 402 00:24:15,230 --> 00:24:19,850 Па сега ние само треба некои динамичен алокација на меморија. 403 00:24:19,850 --> 00:24:23,440 >> Значи, ако (n + 1> капацитет). Сега ќе објаснам n. 404 00:24:23,440 --> 00:24:26,100 N е само колку бајти сте моментално во тампон, 405 00:24:26,100 --> 00:24:28,620 стринг тоа дека во моментов градење од корисникот. 406 00:24:28,620 --> 00:24:33,450 Ако имате повеќе карактери во вашиот тампон отколку ти што имаш капацитет во тампон, 407 00:24:33,450 --> 00:24:37,410 интуитивно она што ние треба да направите потоа е додели повеќе капацитет. 408 00:24:37,410 --> 00:24:43,330 Па ќе одам да обезмаслен преку некои од аритметички тука и се фокусира само на оваа функција овде. 409 00:24:43,330 --> 00:24:46,070 Знаеш што Примерок е или се барем генерално познати. 410 00:24:46,070 --> 00:24:48,970 Земете погоди што realloc прави. >> [Студент] Додава меморија. 411 00:24:48,970 --> 00:24:52,920 Тоа не е сосема додавање на меморија. Тоа reallocates меморија како што следува. 412 00:24:52,920 --> 00:24:57,220 Ако има уште простор на крајот од стрингот да ви даде повеќе од таа меморија 413 00:24:57,220 --> 00:25:00,000 отколку што првично ти дава, тогаш ќе се добие дека дополнителна меморија. 414 00:25:00,000 --> 00:25:03,460 Значи вие само може да ги стави ликовите на јажето да се врати назад да се врати да се врати. 415 00:25:03,460 --> 00:25:05,830 Но, ако тоа не е случај затоа што чекаше премногу долго 416 00:25:05,830 --> 00:25:07,940 и нешто случаен доби plopped во меморијата постојат 417 00:25:07,940 --> 00:25:10,290 но има дополнителна меморија тука долу, тоа е во ред. 418 00:25:10,290 --> 00:25:13,100 Realloc се случува да се направи сите кревање на тешки предмети за вас, 419 00:25:13,100 --> 00:25:16,750 поместите стринг ќе ги прочитате во тоа далеку од тука, си го стави таму долу, 420 00:25:16,750 --> 00:25:19,460 а потоа да ви даде некои повеќе пистата во тој момент. 421 00:25:19,460 --> 00:25:22,550 >> Така да со еден бран на страна, дозволете ми да кажам дека она што GetString прави 422 00:25:22,550 --> 00:25:26,330 е тоа е почнуваат со мали тампон, можеби еден единствен карактер, 423 00:25:26,330 --> 00:25:30,820 и ако корисникот видови во два лика, GetString завршува повикувајќи realloc и вели 424 00:25:30,820 --> 00:25:33,150 еден лик не беше доволно, ми даде два лика. 425 00:25:33,150 --> 00:25:35,950 Потоа, ако се чита преку логиката на јамка, тоа се случува да се каже 426 00:25:35,950 --> 00:25:39,600 корисникот внесе во 3 карактери; дај ми сега не 2 туку 4 карактери, 427 00:25:39,600 --> 00:25:42,320 тогаш ми даде 8, а потоа ми даде 16 и 32. 428 00:25:42,320 --> 00:25:45,000 Фактот дека јас сум удвојување на капацитетот секој пат 429 00:25:45,000 --> 00:25:48,570 значи дека тампон нема да растат бавно, тоа се случува да расте супер брз. 430 00:25:48,570 --> 00:25:51,380 И она што може да биде предност на тоа? 431 00:25:51,380 --> 00:25:54,600 Зошто сум удвојувањето на големината на баферот 432 00:25:54,600 --> 00:25:58,020 иако на корисникот само требаат еден дополнителен лик од тастатура? 433 00:25:58,020 --> 00:26:01,750 [Нечујни студент одговор] >> Што е тоа? >> [Студент] Вие не мора да расте толку често. 434 00:26:01,750 --> 00:26:03,300 Точно. Вие не треба да расте толку често. 435 00:26:03,300 --> 00:26:05,510 И ова е само вид на сте хеџинг вашиот облози тука, 436 00:26:05,510 --> 00:26:10,850 Идејата е дека не сакате да го повикате realloc многу, бидејќи тоа се стреми да биде бавен. 437 00:26:10,850 --> 00:26:12,910 Секое време да побара оперативниот систем за меморија, 438 00:26:12,910 --> 00:26:16,990 како што наскоро ќе видиме во иднина проблем во собата, тоа се стреми да потрае некое време. 439 00:26:16,990 --> 00:26:20,010 Значи минимизирање дека износот на време, дури и ако си трошат малку простор, 440 00:26:20,010 --> 00:26:21,900 има тенденција да биде добра работа. 441 00:26:21,900 --> 00:26:24,060 >> Но, ако ги чита преку завршниот дел од GetString тука - 442 00:26:24,060 --> 00:26:27,950 и повторно разбирањето секоја линија тука не е толку важно денес - 443 00:26:27,950 --> 00:26:30,530 забележите дека на крајот повици Примерок повторно 444 00:26:30,530 --> 00:26:33,880 и доделува точно колку бајти како што треба за низа 445 00:26:33,880 --> 00:26:38,060 а потоа фрла со повик бесплатно претерано големи тампон 446 00:26:38,060 --> 00:26:40,080 ако навистина доби двојно премногу пати. 447 00:26:40,080 --> 00:26:42,730 Значи во кратки, тоа е како GetString работи сето ова време. 448 00:26:42,730 --> 00:26:47,060 Сите тоа не се чита еден карактер во време повторно и повторно и повторно, 449 00:26:47,060 --> 00:26:50,750 и секој пат кога ќе треба некои дополнителни меморија, таа прашува оперативен систем за неа 450 00:26:50,750 --> 00:26:53,670 со повикување realloc. 451 00:26:53,670 --> 00:26:57,890 >> Било какви прашања? Во ред. 452 00:26:57,890 --> 00:26:59,270 >> Напад. 453 00:26:59,270 --> 00:27:04,060 Сега дека ние се разбираме совети или барем се повеќе запознаени со покажувачи, 454 00:27:04,060 --> 00:27:06,700 ајде да се разгледа како целиот свет ќе почне да пропадне 455 00:27:06,700 --> 00:27:10,030 ако не доста брани против непријателски корисници, 456 00:27:10,030 --> 00:27:11,850 луѓе кои се обидуваат да се пробие во вашиот систем, 457 00:27:11,850 --> 00:27:16,890 луѓе кои се обидуваат да го украдат вашиот софтвер со заобиколување некои кодот за регистрација 458 00:27:16,890 --> 00:27:19,090 кои што инаку би можеле да имаат да напишеш внатре 459 00:27:19,090 --> 00:27:22,990 >> Фрлите поглед на овој пример тука, што е само C код кој има функција главна на дното 460 00:27:22,990 --> 00:27:26,380 кој повикува функција foo. И што е тоа поминува на foo? 461 00:27:26,380 --> 00:27:29,680 [Студент] Еден аргумент. >> [Malan] Еден аргумент. 462 00:27:29,680 --> 00:27:33,450 Значи avg [1], што значи дека првиот збор што корисникот ја внеле во командната линија 463 00:27:33,450 --> 00:27:36,360 по a.out или што на програмата се нарекува. 464 00:27:36,360 --> 00:27:41,680 Значи foo на врвот зема во знак *. Но, char * е токму она што? >> [Студент] стринг. 465 00:27:41,680 --> 00:27:43,350 [Malan] А стринг, па нема ништо ново тука. 466 00:27:43,350 --> 00:27:45,420 Стрингот е произволно се нарекува бар. 467 00:27:45,420 --> 00:27:51,430 Во оваа линија тука, знак в [12], во вид на полу-технички англиски јазик, што е оваа линија правиш? 468 00:27:51,430 --> 00:27:55,220 [Студент] Низа на - >> низа на? >> [Студент] Ликови. >> Карактери. 469 00:27:55,220 --> 00:27:58,870 Дај ми низа од 12 знаци. Па ние може да се нарече ова тампон. 470 00:27:58,870 --> 00:28:02,920 Тоа е технички нарекува в, но тампон во програмирање само значи еден куп на просторот 471 00:28:02,920 --> 00:28:04,800 што може да се стави некои работи внатре 472 00:28:04,800 --> 00:28:07,940 Тогаш на крај, memcpy не сум користел пред, но веројатно може да се погоди она што го прави тоа. 473 00:28:07,940 --> 00:28:10,480 Тоа копии меморија. Што значи тоа? 474 00:28:10,480 --> 00:28:19,270 Тоа очигледно копии бар, нејзиниот влез, во в но само до должината на бар. 475 00:28:19,270 --> 00:28:24,930 Но, има бубачка тука. >> [Студент] Вие треба sizeof карактер. >> Океј. 476 00:28:24,930 --> 00:28:30,860 Технички, ние навистина треба да направите strlen (bar) * sizeof (знак)). Тоа е точно. 477 00:28:30,860 --> 00:28:33,930 Но, во најлош случај тука, да претпоставиме дека that's - 478 00:28:33,930 --> 00:28:35,950 Во ред. Потоа, тука е две грешки. 479 00:28:35,950 --> 00:28:39,160 Значи sizeof (знак)); 480 00:28:39,160 --> 00:28:41,290 Да се ​​направи ова малку пошироко. 481 00:28:41,290 --> 00:28:44,910 Така, сега таму е уште една грешка, што е она? >> [Нечујни студент одговор] 482 00:28:44,910 --> 00:28:46,990 Проверете за што? >> [Студент] Провери за NULL. 483 00:28:46,990 --> 00:28:50,270 Ние обично треба да се проверува за NULL, бидејќи лоши работи се случуваат 484 00:28:50,270 --> 00:28:53,200 кога покажувачот е NULL, бидејќи може да заврши случува таму, 485 00:28:53,200 --> 00:28:57,630 и не секогаш треба да се оди на NULL со dereferencing со ѕвездата оператор. 486 00:28:57,630 --> 00:29:01,050 Па тоа е добро. И што друго правиме ние? Логично, има недостаток тука. 487 00:29:01,050 --> 00:29:04,450 [Студент] Проверете дали argc е> = до 2. 488 00:29:04,450 --> 00:29:10,550 Па проверете дали argc е> = 2. Океј, па има три грешки во оваа програма тука. 489 00:29:10,550 --> 00:29:16,630 Ние сме сега проверка ако корисникот навистина внесе во нешто во avg [1]. Добро. 490 00:29:16,630 --> 00:29:20,950 Значи она што е трета грешка? Да. >> [Студент] C не може да биде доволно голем. 491 00:29:20,950 --> 00:29:23,320 Добро. Се пријавивме едно сценарио. 492 00:29:23,320 --> 00:29:29,520 Ние имплицитно проверени не копија повеќе меморија отколку што би ги надминуваат должина од бар. 493 00:29:29,520 --> 00:29:32,510 Значи, ако стрингот на корисникот внесе во е 10 карактери, 494 00:29:32,510 --> 00:29:36,020 ова е велејќи дека само копија 10 карактери. И тоа е во ред. 495 00:29:36,020 --> 00:29:39,940 Но, што ако корисникот ја внеле во еден збор во конзолата како 20-карактер збор? 496 00:29:39,940 --> 00:29:44,900 Ова е велејќи копија 20 ликови од бар во што? 497 00:29:44,900 --> 00:29:49,750 Ц, инаку позната како нашите тампон, што значи дека само напишав податоци 498 00:29:49,750 --> 00:29:52,540 до 8 бајт локации кои не поседувате, 499 00:29:52,540 --> 00:29:54,870 и не ги поседувате во смисла дека никогаш не сте ги распределени. 500 00:29:54,870 --> 00:30:00,370 Значи тоа е она што е општо познато како на buffer overflow напад или тампон превишаването напад. 501 00:30:00,370 --> 00:30:05,580 И тоа е напад во смисла дека ако корисникот или програма која е повикувајќи вашата функција 502 00:30:05,580 --> 00:30:10,490 е тоа злобно, она што всушност се случува следно всушност може да биде многу лошо. 503 00:30:10,490 --> 00:30:12,450 >> Па ајде да ги разгледаме во оваа слика овде. 504 00:30:12,450 --> 00:30:16,060 Оваа слика претставува вашиот магацинот на меморија. 505 00:30:16,060 --> 00:30:19,580 Потсетиме дека секој пат кога ќе се јавите на функција ќе добиете оваа мала рамка на магацинот 506 00:30:19,580 --> 00:30:21,520 а потоа друг, а потоа уште и уште. 507 00:30:21,520 --> 00:30:24,300 И досега, ние сме само вид на апстрахирани овие како правоаголници 508 00:30:24,300 --> 00:30:26,290 или на табла или на екранот овде. 509 00:30:26,290 --> 00:30:30,580 Но, ако ние зумирате на еден од оние правоаголници, кога ќе се јавите на функција foo, 510 00:30:30,580 --> 00:30:35,880 излегува дека има уште на магацинот во внатрешноста на таа рамка во која правоаголник 511 00:30:35,880 --> 00:30:40,060 од само x и y и А и Б, како што се зборува за swap. 512 00:30:40,060 --> 00:30:44,410 Излезе дека има некои пониско ниво детали, меѓу нив и повратна адреса. 513 00:30:44,410 --> 00:30:49,550 Значи испаѓа кога главната повици foo, главни треба да го извести foo 514 00:30:49,550 --> 00:30:53,520 она адреса главната е во меморијата на компјутерот 515 00:30:53,520 --> 00:30:57,770 затоа што во спротивно, штом foo е направено извршување, како во овој случај тука, 516 00:30:57,770 --> 00:31:00,830 штом ќе се постигне овој затворени кадрава голема заграда на крајот на foo, 517 00:31:00,830 --> 00:31:05,310 како што е грижам не foo знаат каде контрола на програмата треба да се оди? 518 00:31:05,310 --> 00:31:08,970 Се испоставува дека одговорот на тоа прашање е во овој црвено правоаголник тука. 519 00:31:08,970 --> 00:31:12,670 Ова претставува покажувач, и тоа е до компјутер за чување на привремено 520 00:31:12,670 --> 00:31:17,030 на т.н. магацинот на адреса на главниот така што веднаш штом foo е направено извршување, 521 00:31:17,030 --> 00:31:21,120 на компјутерот знае каде и што линија во главниот да се врати. 522 00:31:21,120 --> 00:31:23,940 Зачувани Рамка покажувачот се однесува слично на ова. 523 00:31:23,940 --> 00:31:26,310 Char * бар тука претставува она? 524 00:31:26,310 --> 00:31:31,350 Сега ова сино сегмент тука е рамка на foo. Што е бар? 525 00:31:31,570 --> 00:31:35,010 Бар е само аргумент на функцијата foo. 526 00:31:35,010 --> 00:31:37,500 Па сега ние сме назад во вид на познатите сликата. 527 00:31:37,500 --> 00:31:39,850 Има уште работи и повеќе одвлекување на вниманието на екранот, 528 00:31:39,850 --> 00:31:43,380 но ова светло сина сегмент само е она што ние сме биле цртање на таблата 529 00:31:43,380 --> 00:31:45,790 за нешто како swap. Тоа е рамка за foo. 530 00:31:45,790 --> 00:31:51,490 И единственото нешто во неа во моментов е бар, кој е овој параметар. 531 00:31:51,490 --> 00:31:55,220 Но, што друго треба да биде во магацинот во согласност со овој код овде? 532 00:31:55,220 --> 00:31:57,760 [Студент] знак в [12]. >> [Malan] знак в [12]. 533 00:31:57,760 --> 00:32:02,810 Ние, исто така треба да се види 12 квадрати на меморија доделени на променлива наречена в, 534 00:32:02,810 --> 00:32:04,970 и навистина ние немаме оној на екранот. 535 00:32:04,970 --> 00:32:08,480 На самиот врв има в [0], а потоа авторот на овој дијаграм 536 00:32:08,480 --> 00:32:11,850 не се мачи цртање на сите плоштади, но таму навистина се 12 има 537 00:32:11,850 --> 00:32:16,590 бидејќи, ако се погледне во долниот десен, в [11] ако смета од 0 е 12-ти, како бајт. 538 00:32:16,590 --> 00:32:18,400 Но, тука е проблемот. 539 00:32:18,400 --> 00:32:22,390 Во која насока се в расте? 540 00:32:22,390 --> 00:32:27,080 Вид на врвот надолу ако тоа почнува на врвот и расте до дното. 541 00:32:27,080 --> 00:32:30,110 Тоа не изгледа како ние самите остави многу пистата тука на сите. 542 00:32:30,110 --> 00:32:32,090 Ние сме вид на се насликани во еден агол, 543 00:32:32,090 --> 00:32:36,940 и дека в [11] е право против бар, кој е во право против Зачувани Рамка покажувач, 544 00:32:36,940 --> 00:32:39,960 кој е во право против повратна адреса. Нема повеќе простор. 545 00:32:39,960 --> 00:32:42,810 Значи она што е импликација потоа ако зафркнам 546 00:32:42,810 --> 00:32:46,500 и ќе се обидат читање 20 бајти во 12-бајт тампон? 547 00:32:46,500 --> 00:32:50,060 Каде се оние 8 дополнителни бајти ќе одат? >> [Студент] Внатре - 548 00:32:50,060 --> 00:32:53,200 Внатре пак речиси сè друго, од кои некои се супер важно. 549 00:32:53,200 --> 00:32:57,260 И најважно, потенцијално, е црвено поле таму, повратна адреса, 550 00:32:57,260 --> 00:33:03,560 бидејќи претпоставувам дека можете или случајно или adversarially запише овие 4 бајти, 551 00:33:03,560 --> 00:33:07,260 дека покажувачот адреса, а не само со ѓубре, но со голем број 552 00:33:07,260 --> 00:33:09,810 што се случува да претставува вистинската адреса во меморијата. 553 00:33:09,810 --> 00:33:13,880 Што е импликација, логично? >> [Студент] Функција се случува да се врати во некое друго место. 554 00:33:13,880 --> 00:33:15,250 Точно. 555 00:33:15,250 --> 00:33:19,170 Кога foo враќа и хитови што кадрава голема заграда, програмата ќе продолжи 556 00:33:19,170 --> 00:33:25,060 не да се врати во главната, тоа нема да се врати на она што адресата е дека црвено поле. 557 00:33:25,060 --> 00:33:28,600 >> Во случај на заобиколување софтвер регистрација, 558 00:33:28,600 --> 00:33:32,260 што ако адресата тоа е се врати е функција која обично добива се нарекува 559 00:33:32,260 --> 00:33:35,690 откако сте платени за софтвер и внесуваат вашата регистрација код? 560 00:33:35,690 --> 00:33:39,870 Можете да ги сортирате на трик на компјутерот во нема тука, но наместо тоа се случува тука. 561 00:33:39,870 --> 00:33:45,100 Или ако сте навистина паметна, противник всушност може да напишете на тастатурата, на пример, 562 00:33:45,100 --> 00:33:50,690 не е вистинскиот збор, а не 20 карактери, но претпоставувам тој или таа всушност видови во 563 00:33:50,690 --> 00:33:52,770 некои знаци кои претставуваат код. 564 00:33:52,770 --> 00:33:55,320 И тоа нема да биде C код, тоа е всушност ќе биде карактери 565 00:33:55,320 --> 00:33:59,290 кои претставуваат бинарни машина код, 0-ти и 1S. 566 00:33:59,290 --> 00:34:01,290 Но, претпоставувам дека си паметен доволно за да го направи тоа, 567 00:34:01,290 --> 00:34:06,500 некако да ставете во GetString прашува нешто што е суштина Составувач код, 568 00:34:06,500 --> 00:34:09,980 и последната 4 бајти запише дека враќањето адреса. 569 00:34:09,980 --> 00:34:13,360 И она адреса е дека влезот направам? 570 00:34:13,360 --> 00:34:18,630 Тоа всушност продавници во овој црвени правоаголник на адресата на првиот бајт од тампон. 571 00:34:18,630 --> 00:34:23,070 Значи мора да биде навистина паметна, и ова е многу обиди и грешки за лоши луѓе таму, 572 00:34:23,070 --> 00:34:25,639 но ако можете да дознаам колку е голема оваа тампон е 573 00:34:25,639 --> 00:34:28,820 така што во последните неколку бајти во влезот ви обезбеди на програмата 574 00:34:28,820 --> 00:34:33,540 се случи да биде еквивалент на адресата на почетокот на вашиот тампон, можете да го направите тоа. 575 00:34:33,540 --> 00:34:39,320 Ако речеме нормално здраво и \ 0, тоа е она што завршува во тампон. 576 00:34:39,320 --> 00:34:44,420 Но, ако ние сме повеќе умен и ние ја пополни таа тампон со она што генерички Ќе му се јавам напад код - 577 00:34:44,420 --> 00:34:48,860 ААА, напад, напад, напад - кога тоа е само нешто што прави нешто лошо, 578 00:34:48,860 --> 00:34:51,820 она што се случува ако сте навистина паметна, може да го направите тоа. 579 00:34:51,820 --> 00:34:58,610 Во црвената кутија тука е низа од броеви - 80, C0, 35, 08. 580 00:34:58,610 --> 00:35:01,610 Забележете дека тоа се совпаѓа со бројот што е овде горе. 581 00:35:01,610 --> 00:35:04,430 Тоа е во обратен редослед, но повеќе за тоа друг пат. 582 00:35:04,430 --> 00:35:08,140 Забележете дека ова враќање адреса е намерно изменети 583 00:35:08,140 --> 00:35:12,020 да се изедначи со адреса се тука, а не на адреса на главниот. 584 00:35:12,020 --> 00:35:17,500 Значи, ако лошо момче е супер паметни, тој или таа се случува да се вклучат во тој напад код 585 00:35:17,500 --> 00:35:20,930 нешто како избришете сите датотеки на корисникот или копија на лозинки 586 00:35:20,930 --> 00:35:24,680 или создадете корисничка сметка дека Јас тогаш може да се логирате на - ништо на сите. 587 00:35:24,680 --> 00:35:26,950 >> И ова е и опасноста и моќта на Ц 588 00:35:26,950 --> 00:35:29,840 Бидејќи имате пристап до меморијата преку совети 589 00:35:29,840 --> 00:35:32,520 и затоа може да напише нешто што сакате во меморијата на компјутерот, 590 00:35:32,520 --> 00:35:35,080 може да се направи компјутерски направи нешто што сакате 591 00:35:35,080 --> 00:35:39,550 едноставно со тоа што го скокаат наоколу во рамките на својата мемориски простор. 592 00:35:39,550 --> 00:35:44,650 И така до ден денес толку многу програми и толку многу веб-сајтови кои се компромитирани 593 00:35:44,650 --> 00:35:46,200 се сведуваат на луѓето да ги искористат предностите на ова. 594 00:35:46,200 --> 00:35:50,760 И ова може да изгледа како супер софистицирани напад, но тоа не секогаш ќе започне на тој начин. 595 00:35:50,760 --> 00:35:53,560 Реалноста е дека она што лоши луѓе обично ќе направите, е, 596 00:35:53,560 --> 00:35:58,200 дали тоа е програмата на командната линија или програма GUI или веб-сајт, 597 00:35:58,200 --> 00:35:59,940 ли само ја стартувате обезбедување глупости. 598 00:35:59,940 --> 00:36:03,980 Можете да напишете во еден навистина голем збор во полето за пребарување и притиснете Enter, 599 00:36:03,980 --> 00:36:05,780 и ќе чекате да се види дали на веб-сајтот се урна 600 00:36:05,780 --> 00:36:09,990 или ќе чекате да се види дали на програмата манифестира некои порака за грешка 601 00:36:09,990 --> 00:36:14,330 бидејќи ако имаат среќа како лош човек и ви обезбеди некои луди влез 602 00:36:14,330 --> 00:36:18,980 којшто ја дроби програма, тоа значи дека на програмерот не се антиципираат вашите лошо однесување, 603 00:36:18,980 --> 00:36:23,630 што значи дека може да веројатно со доволно напор, доволно обиди и грешки, 604 00:36:23,630 --> 00:36:26,650 дознаам како да се отпочне попрецизно напад. 605 00:36:26,650 --> 00:36:31,410 Така што голем дел од безбедноста не е само избегнување на овие напади заедно 606 00:36:31,410 --> 00:36:34,100 но откривање на нив, а всушност гледа во историјата 607 00:36:34,100 --> 00:36:36,780 и види што луди влезови има луѓе внеле во вашиот сајт, 608 00:36:36,780 --> 00:36:38,960 она што за пребарување се луѓе ја внеле во вашиот вебсајт 609 00:36:38,960 --> 00:36:42,870 во надеж дека ќе преплавени некои тампон. 610 00:36:42,870 --> 00:36:45,500 И, сето тоа се сведува на едноставна основите на она што е низа 611 00:36:45,500 --> 00:36:49,080 и што значи тоа за алоцирање и употреба меморија. 612 00:36:49,080 --> 00:36:51,710 >> Поврзани со тоа, тогаш премногу е ова. 613 00:36:51,710 --> 00:36:54,280 Ајде само се загледувам во внатрешноста на хард дискот уште еднаш. 614 00:36:54,280 --> 00:36:58,440 Се сеќавате од една недела или две пред тоа кога ќе повлечете датотеки на вашиот ѓубрето или корпата за ѓубре, 615 00:36:58,440 --> 00:37:03,710 што се случува? >> [Студент] Ништо. >> Апсолутно ништо, нели? 616 00:37:03,710 --> 00:37:05,740 Конечно, ако се намалат на простор на дискот, 617 00:37:05,740 --> 00:37:08,190 Windows или Mac OS ќе започне бришење на датотеки за вас. 618 00:37:08,190 --> 00:37:10,390 Но, ако повлечете нешто таму, тоа не е воопшто безбедно. 619 00:37:10,390 --> 00:37:13,800 Сите вашиот цимер или пријател или член од семејството треба да направите е да кликнете двапати и Voila, 620 00:37:13,800 --> 00:37:16,310 има сите површни датотеки кои сте се обиделе да ги избришете. 621 00:37:16,310 --> 00:37:19,590 Повеќето од нас барем знам дека треба да се десен клик или контрола клик 622 00:37:19,590 --> 00:37:22,310 и празни ѓубрето или нешто слично. 623 00:37:22,310 --> 00:37:25,000 Но, дури и тогаш тоа сосема не го направите трик 624 00:37:25,000 --> 00:37:28,010 затоа што она што се случува кога имате фајл на вашиот хард диск 625 00:37:28,010 --> 00:37:32,770 кој претставува некои Word документ или некои JPEG, и ова го претставува вашиот хард диск, 626 00:37:32,770 --> 00:37:35,350 и да речеме оваа треска тука претставува таа датотека, 627 00:37:35,350 --> 00:37:38,390 и тоа е составен од целиот куп на 0-ти и 1S. 628 00:37:38,390 --> 00:37:42,470 Што се случува кога не сте само повлечете таа датотека во ѓубрето или да ѓубрето 629 00:37:42,470 --> 00:37:48,020 но, исто така, го испразните? Вид на ништо. 630 00:37:48,020 --> 00:37:49,640 Тоа не е апсолутно ништо сега. 631 00:37:49,640 --> 00:37:54,290 Сега тоа е само ништо, бидејќи малку нешто се случува во форма на оваа табела. 632 00:37:54,290 --> 00:37:58,370 Значи има некој вид на база на податоци или маса во внатрешноста на меморија на компјутерот 633 00:37:58,370 --> 00:38:03,850 што во суштина има една колона за датотеки имиња и една колона за датотеки "локација, 634 00:38:03,850 --> 00:38:07,720 каде што ова може да биде локација 123, само случаен број. 635 00:38:07,720 --> 00:38:14,560 Значи, ние би можеле да имаат нешто како x.jpeg и локација 123. 636 00:38:14,560 --> 00:38:18,800 Што се случува тогаш кога всушност сте го испразните ѓубрето? 637 00:38:18,800 --> 00:38:20,330 Што оди далеку. 638 00:38:20,330 --> 00:38:23,610 Но, она што не оди далеку е 0-ти и 1S. 639 00:38:23,610 --> 00:38:26,270 >> Значи она што е тогаш врската да pset4? 640 00:38:26,270 --> 00:38:31,240 Па, со pset4, само затоа што ние сме случајно избришани на Compact Flash картичка 641 00:38:31,240 --> 00:38:35,750 кои ги имаше сите од овие слики или само затоа што од лоша среќа стана оштетени 642 00:38:35,750 --> 00:38:38,000 не значи дека 0-ти и 1S не се сеуште таму. 643 00:38:38,000 --> 00:38:40,410 Можеби неколку од нив се изгубени затоа што нешто доби оштетени 644 00:38:40,410 --> 00:38:43,320 во смисла дека некои 0-ти стана 1S и 1s стана 0-ти. 645 00:38:43,320 --> 00:38:47,240 Лоши работи може да се случи поради кабриолет софтвер или неисправни хардвер. 646 00:38:47,240 --> 00:38:50,370 Но, многу од оние битови, можеби дури и 100% од нив, се уште е таму. 647 00:38:50,370 --> 00:38:55,050 Тоа е само дека компјутерот или камерата не знае каде JPEG1 отворени 648 00:38:55,050 --> 00:38:56,910 и каде JPEG2 отворени. 649 00:38:56,910 --> 00:39:01,070 Но, ако, програмер, знаете со малку такт кога тие JPEG слики се 650 00:39:01,070 --> 00:39:06,010 или она што тие изгледаат така што може да анализира 0-ти и 1S и велат JPEG, JPEG, 651 00:39:06,010 --> 00:39:09,440 можете да напише програма со суштина само еден за или додека јамка 652 00:39:09,440 --> 00:39:12,820 која го обновува секој еден од овие датотеки. 653 00:39:12,820 --> 00:39:16,030 Така лекција тогаш е да се започне безбедно бришење на вашите датотеки 654 00:39:16,030 --> 00:39:18,340 ако сакате да се избегне ова заедно. Да. 655 00:39:18,340 --> 00:39:21,010 >> [Студент] Како се вели на вашиот компјутер 656 00:39:21,010 --> 00:39:23,550 дека имате повеќе меморија отколку што беше пред тоа? 657 00:39:23,550 --> 00:39:27,820 Има повеќе меморија отколку што беше порано - >> [студент] Повеќе достапната меморија. 658 00:39:27,820 --> 00:39:29,630 О. Добро прашање. 659 00:39:29,630 --> 00:39:32,360 Па зошто тогаш по празнење на ѓубрето не вашиот компјутер ти кажам 660 00:39:32,360 --> 00:39:34,910 дека имате повеќе слободен простор отколку што беше пред тоа? 661 00:39:34,910 --> 00:39:36,770 Во мало, затоа што тоа е лажење. 662 00:39:36,770 --> 00:39:40,740 Повеќе технички, имате повеќе простор, бидејќи сега вие рековте 663 00:39:40,740 --> 00:39:43,680 може да се стави други нешта каде таа датотека некогаш беше. 664 00:39:43,680 --> 00:39:45,450 Но, тоа не значи дека битови се оди, 665 00:39:45,450 --> 00:39:48,590 и тоа не значи дека на битови се промени на сите 0-ти, на пример, 666 00:39:48,590 --> 00:39:50,150 за Ваша заштита. 667 00:39:50,150 --> 00:39:54,640 Па од друга страна, ако безбедно избрише датотеките или физички уништи уред, 668 00:39:54,640 --> 00:39:57,300 дека навистина е единствениот начин понекогаш околу тоа. 669 00:39:57,300 --> 00:40:02,020 >> Па зошто да не се остави на тој полу-страшно белешка, и ние ќе се видиме в понеделник. 670 00:40:02,020 --> 00:40:07,000 [Аплауз] 671 00:40:07,780 --> 00:40:10,000 >> [CS50.TV]