[За възпроизвеждане на музика] DAVID Malan: Добре. Това е CS50, и този е краят на седмицата 2. Аз съм толкова съжалявам, че не би могло да бъде там с теб всичко днес, но вие сте в много добри ръце. Позволете ми да ви представя Собствена Rob Боудън CS50 е. ROB Боудън: И разбира се, след това ние трябва да се гавриш с факта, че той ни изпрати вертикална видео и да се покаже. [Възпроизвеждане на видео] [За възпроизвеждане на музика] [FOOTSTEPS] -Това Не е видео Трябва да гледаме по този начин. Тя би могла да бъде предотвратена. Кажете не на вертикални видеоклипове. -Vertical Видеоклипове се случват, когато задръжте вашата камера по грешен начин. Видеоклипът ви ще приключи заприличваха глупости. - [Грухтене] -Има Повече и повече хора, пристрастени да прави вертикални клипове всеки ден. Това не е пляскане или нищо, но тя все още е наистина лошо. Има два различни вида хора, които са засегнати от VVS. Първата група третира видеоклипове те застрелям като снимков материал. Те не искам да кажа нищо лошо. Те просто не разбират, че докато можете да се обърнете на картина, наистина не може да се превърне един видеоклип. [БЛЪСКАМ СЕ] - [MONKEY ЗВУЧИ] -В Друга група е хора които не дават [пуикането]. -Vertical Video синдром е опасно. Картинки за движение имат винаги е бил в хоризонтално положение. Телевизорите са хоризонтални. Компютърни екрани са хоризонтални. Очите на хората са хоризонтални. Ние не са изградени, за да гледате видеоклипове вертикални. -Аз Обичам вертикални видеоклипове. -Nobody Му пука за теб. -Ако Този проблем е не бъде овладяна, вие също ще започне да се показва четири видеоклипове наведнъж, само за да спестите трафик. -Letterboxed Вертикални видеоклипове ще да бъде с размерите на пощенска марка. -И Тя ще се разпространи навсякъде. Филми екрани имат винаги е бил в хоризонтално положение. Ако вертикални видеоклипове стават приети, кина ще трябва да бъде висок и слаб. -И Всички киносалоните ще Трябва да се срине и възстановен. И от времето, когато те са били преустроени, Мила Кунис ще бъде стара и грозна. -Birds Ще се блъсне в тях и да умре. -Ще Получите всичко схванат вратовете от вдига поглед. -И Никой няма да седне в на първия ред все пак. -Джордж Лукас ще преиздадат Star Wars again-- кльощавият издание. -Аз Никога не е наистина в състояние да каже историята, че аз исках да кажа. Това е чудесна възможност за мен да експериментирате с нова технология. -You're Идиот. -Всеки Път мобилно устройство се използва за запис на видео, изкушението е там. Само да кажа не. Кажете не на Джордж Лукас. Кажете не на стария Мила Кунис. Кажете не на вертикални видеоклипове. -И Ако видите някой да го прави, да речем, "не снимате това право сляпо!" [За възпроизвеждане на музика] [END PLAYBACK] [Аплодисменти] [AUDIO OUT] ROB Боудън: --simple форма на криптографията, която е в основата на криптирането и декриптиране на тайни послания. Така че тук имаме един много прост играчка. И идеята е външния пръстен върти около вътрешния пръстен. И можете да видите, може би, ако съм я увеличите в, that--, че е трудно да се види. Но, като броят 1-- добре, че се мести. Броят една карта на писмото X, номер 2 карти на писмото J. Невероятно трудно да не прескачате напред. Писмо 2 карти да J. Номер 3 карти да D. Така че с този пръстен може да дадете някой на съобщение: 1, 2, 3. За някои вас причина Искам да им кажа XJD. Но вие можете да им дадете някои съобщение на номера, и толкова дълго, тъй като те имат този пръстен, те може да декриптира това, което се опитвам да кажа. Така че може би сте виждали това Конкретен пример на криптографията преди, ако около коледните празници сте гледали A Christmas Story. Ако никога не сте виждали го и преди, след това просто включите TBS при буквално всяко време на Бъдни вечер, защото те просто го покажа гръб до гръб назад, за да Насрещен целия ден. И съответната видеото е това. [Възпроизвеждане на видео] Бензен-то известен на всички и разни че Ралф Паркър е тук назначен за член на малката Ани Secret Circle Orphan и има право на всички почести и ползи, настъпили към него. Подписано Little Orphan Annie. Приподписан Пиер Андре с мастило! Honors и ползи вече на възраст от девет! [Крещи ОТ RADIO] -Хайде. Нека се заемем с това. Нямам нужда от всичко, което джаз за контрабандисти и пирати. -Listen Утре вечер с заключителната приключението на Черно пиратски кораб на. Сега е време за Тайно послание на Ани за вас, членовете на Secret Circle. Не забравяйте деца, само за членове на Secret Circle Ани може да декодира тайното послание на Ани. Не забравяйте, че Ани е в зависимост от вас. Определете вашите игли за B2. Ето съобщението. 12. 11. 2. -Аз Съм в първия ми тайна среща. -25. 14. 11. 18. 16. -О, Pierre е в силен глас тази вечер. Мога да кажа, че тази вечер послание е наистина важно. -3. 25. Това е съобщение от себе си Ани. Не забравяйте, че не казвай на никого. -Five Секунди по-късно, аз съм в единствения стая в къщата, където едно момче на девет може да седне в личния живот и декодиране. Аха! B! Отидох към следващата. E. Първата дума е "да". S. Тя идваше по-лесно сега. U. 25. Това е R. -СОМе Върху, Ралфи! Аз бях да вървим! -Ще Бъде чак, Ma! Gee факир. Т. О. "със сигурност ще бъде" - не забравяйте да какво? Каква беше Little Orphan Ани се опитвам да кажа? Бъдете сигурни с какво? -Randy Е трябва да си ходи! Ще ви моля да излезе? -Всички Полето, мамо! Връщам се веднага вън! Бях все по-близо сега. Напрежението беше ужасно. Какво беше? Съдбата на планетата може да виси на косъм! -Ralphie, Ранди трябва да си ходи! -Ще Бъде прав вън, за да плаче на глас! Почти там! Пръстите ми отлетя. Умът ми беше стоманен капан. Всеки порите вибрира. Беше почти ясно! Да. Да. Да. Да. Не забравяйте да пиете Ovaltine. Ovaltine? А калпав търговска? Кучи син. [END PLAYBACK] ROB Боудън: Така че това е начина, Ovaltine се отнася до областта на криптографията. По принцип CS50 просто рекламира Ovaltine, така че бихме могли да е кофти реклама за Ovaltine. Всичко е наред. Така че сега действително компютърни науки. Не забравяйте в понеделник престанахме гмуркане дълбоко в низове. Така че ние се занимават с низа "Zamyla." И ние се признава факта, че можем да се отнасяме "Zamyla" като последователност от символи. И не забравяйте, че сме научили скобата нотация. Така че, ако това са били съхранявани в низ "S", след което ако ние казахме и скоба 0, че ще посочва капитал Z. на писмо И ако ние казахме и скоба 1, че би показва, че първото малки букви а, и така нататък до ите конзола 5, които биха показали издържи. Сега не забравяйте, че Дължина на този низ е 6, но индексите от началото на низа са От 0 до 5, Z, чрез който издържи. Така че това вече се вписва в по-голяма снимка от паметта на компютъра ви, вашата RAM. Така че някъде програмата, която сте стартирали компютъра си трябва да се помни, Zamyla някъде в паметта. Така че мога да имам доброволец? Да моля. А вие как се казвате? DEAN: Дийн. ROB Боудън: Дийн? Приятно ми е да се запознаем, Дийн. Така дойде тук, и ние ще имаме чертаете на нашата хубава готин оформление на паметта. Сега обичам да мисля за памет като една дълга ивица от байтове, но само за целите на дисплея пускаме Просто се отляво надясно и отгоре надолу. ДОБРЕ? Така че аз ще се покаже program-- Getstrings.c. И така, всичко, тази програма е прави се иска четири струни от потребителя GetString и след печат независимо, че първият низ влезе беше. Ние сме игнориране два през четири. ДОБРЕ. Така че тук, когато now-- Аз първо поискване s1. Така че вие ​​сте на компютъра. И вие прилагане GetString. Така че можете да поиска низ от мен, и аз казвам, OK, Дийн. Дайте низа "Дийн". Така че някъде в паметта ви трябва да се помни "Дийн". Така че ще го напиша в паметта някъде. Perfect. ДОБРЕ. Така че сега сме s2. И s2 ще бъде искане до GetString. Така че аз отивам да въведете низ. Отивам да въведете "Хана". Така влиза "Хана" някъде в паметта. Да. А-Н. ОК, така че сега s3. И това ще бъде друг поиска да GetString. И така, сега влиза "Мария". Всичко е наред. И след това има един последен искане до GetString, s4. Така че, аз не знам. Какво ще кажеш да отидем с antidisestablishmentarianism. Така, че влиза в паметта. Да. Така че просто правя "Роб." ДОБРЕ. Така че сега explain-- защо направих оставите тези пространства? Защо трябва това поле празно пространство тук, тук и тук? Да. Така че забележите, когато отида да отпечатате s1-- така че ако ние имаше "Хана" бягане чак до "Дийн", как можем да знаем, когато низа "Декан" свършва? Така че отпечатването на низ S1 може да има просто отпечатва "DeanHannahMariaRob" ако то не разполага с никаква представа кога "Дийн" фактически завършва. Всичко е наред. Така в паметта на начина, по който ние всъщност представлява този край на низ е с наклонена черта нула. Така че това пространство е точно това, което искахме. Тя трябва да бъде наклонена черта нула. Това ще бъде една наклонена черта нула, и това ще бъде наклонена черта нула. И вие може да имате страхотна награда за да бъдеш съвършен доброволец. Вземете стрес топка! ДОБРЕ. Така че този герой е наклонена черта нула как можем да посочи в края на низ. Това е как, когато всяка програма иска да отпечатате низ, Спомням си, че това е how-- научихме функцията strlen миналата седмица? Дължина на String? Това е как дължина низ е в състояние да определи колко дълго низ е. Тя просто продължава итерации над знаците докато намери на обратно наклонена черта нула характер. Така че важното е да се осъзнае за обратно наклонена черта нула характер е това е представено от всички нули в бита. Така че забележите, че това е важно от нула характер. Така нулевото характер, ако си спомняте в примера, че даде в края на лекция, където героите карта to-- като капитал A карти до 65. С малки букви на карти до 97. Малки букви б ще бъде 98. Така числото 0 картите to-- аз не правя знаете разстояние от върха на главата ми. 44 или 45. Някъде в този регион. Така характера 0 е реален брой. Но обратно наклонена черта нула карти за всички нула бита. Така че има разлика между наклонена черта нула, които ние ще се обадя на нулевата терминатор. Има разлика между наклонена черта нула и характера нула. Всичко е наред. Така че говорим малко повече за струни. Така че след това, което виждаме тук, това е начинът, тя ще бъде изложена в паметта. Така че тази идея за низове като последователност на characters-- така официалната компютъра sciency термин за последователност е масив. Така бихме нарекли низ набор от символи. И всъщност има други данни видове, които можем да направим масиви от. Така че, за да мотивира това, разгледаме един пример. Ние ще го наричаме ages0.c аз ще копирате и поставите нашия шаблон. ДОБРЕ. Така че в тази програма, което ние искате да направите, е да вземете възраст от трима студенти в курса. Така че ние знаем за инт age-- и сега аз ще кажа 0. Така че може да искате да се каже age1, но за цели, ние ще видим много скоро, Аз ще кажа, инт age0 равнява GetInt. Така че на същата покана да GetInt че ние сме били използване на I не се случи, за да се накара казвайки: "дай ми възраст." Но просто не поиска това. И age1 равнява GetInt. И инт age2 равнява GetInt. Така че, отново, трима студенти, но в крайна сметка променливите индекси са age0 чрез age2. ДОБРЕ. Така че тази програма ще направи каквото ние искаме с age0, age1 и age2, но в крайна сметка тази програма работи за трима студенти. ДОБРЕ. Така че сега какво, ако аз искам четирима студенти? Е, аз отивам да трябва да се върна в моя код, променете коментара, и сега имаме едно цяло число age3 равнява GetInt. ДОБРЕ. Така че, който вижда проблемът тук? Какъв е проблемът с този вид настройка? Да. Да. Така че ние сме за създаване на променлива за всеки ученик. Сега, че работи, но в крайна сметка какво ще стане ако аз сега казват: "Искам да вземеш, на възраст от осем студенти или 16 студенти или все пак много студенти от стотиците студенти в CS50 или хилядите студенти на колежа или милиардите хора по света? Така че в крайна сметка това не е устойчиво. Всеки път, когато видите сами копиране и поставяне код, подобен на този, вие по принцип трябва да се чувстват че има по-добър начин. Така че това е мястото, където ще се въведе декларация масив. Така че, когато декларира масив, това е, което общия формат ще изглежда така. Отиваме да кажа вида. и след това отиваме да даде името на това масив, точно както ние определяме дадена променлива. И тогава най-накрая ние използваме тази скоба нотация отново но в различен контекст от как сме се да го използвате по-рано. Така че тук това изглежда като нормална променлива декларация, че сме виждали. Така че сме виждали инт х запетая преди. Е, сега можем да видим нещо като INT х 5 скоби. И пускането на тази идея в Програма GetInt че ние have-- така че ние може да реализира това по същия начин. Да кажем, че в CS ние сме склонни да се използва N, тъй като броят на нещо. Така че тук ние ще съхранявате четирима студенти. И сега можем да кажем, инт възраст скоба не, N- доста го получи yet-- да декларира масив от четирима ученици. И така, как това ще изглежда в памет ще бъде подобна на това. Изчистете това. И ние ще трябва някъде в memory-- Ще сложа това там горе. Така че някъде в паметта. Едно две три четири. Имаме четири числа в един ред за този набор от четири числа. Така че, в момента, това, което е най- размер на една от тези кутии? Да. Това е четири байта. Това е 32 бита. Така че сега това е различно от масива, че видяхме по-рано, на масива от знаци. В низ всяка кутия е само един байт, защото един герой е само един байт. Но с набор от числа, всеки кутия трябва да бъде четири байта, с цел за да се побере цялото число. Така че това е, което масив от четири целочислени ще приличат. И след това обратно към код. Сега искаме да всъщност магазин числа в които масив. Така че сега това е много, много, много общ модел, който ще в някакъв момент стане мускулна памет. Така че аз INT е равна на 0. и по-малко от п. аз плюс плюс. Възрастова група и се равнява GetInt. Така че това за цикъл, този формат, трябва да се използва за много. Така че това е по принцип, как ще го направим обхождане на почти всеки масив. Сега забележите този вид обяснява защо от самото начало не сме имали за примки отиват за инт и е равно на 1, и по-малко от или равно на 10. Причината е, че се излиза от нула прави тази работа добре с масиви. Така масиви са нулеви индексира. Ако този масив е с дължина 4, индексите са от 0 до 3. Така през първото повторение на този цикъл за ние ще бъде създаването възраст скоба 0 равна на повикване до GetInt. Така че каквото и да се случи да влезе в клавиатурата. През второто преминаване, ние сме създаване age1 равна на GetInt. Трето пас, age2. Final пас age3. Така че, ако в първото преминаване на контура I, въведете числото 4 в клавиатурата, След това ние ще вмъкнете 4 тук. Ако на втория проход въведа 50, ние ще сложи 50 тук. На третия прохода бих могъл въведете отрицателна 1, 1 отрицателен, и накрая, ако въведете 0-- и Сега не забравяйте, че това е индекс три. След като примка назад, аз се ще бъде увеличен до 4. Вече не е по-малко от N, което е 4. И ние се измъкнат от примката. Така че това, което би било лошо в това? [Недоловим]? АУДИТОРИЯ: [недоловим] Да. Така че масивът има само четири места, което означава, както индекси от 0 до 3. Така че, ако това беше така, щях поеме стойността 4 в някакъв момент. възрастова група 4 ще бъде определянето каквото и да се случва да бъде тук това, което имам да кажа, въведете 6. Това ще се настроите на 6. Но ние не знаем какво е тук. Това не е памет че сме имали достъп. Така че, ако си спомняте от предходната лекция, той е отпечатване на стойностите на Zamyla и в един момент той се удари тази сегментацията Аномалия. Така че най-вероятно ще се видим много грешки, колкото можете сегментиране се приложат някои от наборите проблемни. Но това е един от начините, по които можете да се натъкнете на сегментацията Аномалия, когато започнете достъп памет по начини, които не трябва да бъдат. Така че ние не са имали достъп до това място и това е грешка. Така че това е по-добре. Сега все още е малък проблем с този код. И това е в общи линии, че ние сме все още остана на четири студенти. Сега, ако искам да използвам осем студенти, OK. Това не е кой знае какво. Мога да отида в, променете коментира, както и промяна п. Сега това ще работи с осем студенти. Ако компилирате и стартирате тази това, тя ще се появи me-- тя ще поиска числа, за осем студенти и тя просто ще работи. Но това е по-малко от идеални, за да се наложи да компилирате програмата всеки път Искам да променя броя на учениците че искам да въведете вековете за. Така че окончателното подобряване на това, както ще видим, че сме here-- ще поиска от броя на хората. Тук имаме редица от хората в стаите или всякакви възрасти хора в стаята. Но ние ще поиска броя от хората в помещението от страна на потребителя. Така че това е точно същото време не се прави линия, която сме виждали преди. Това е точно същото направя-линия, докато че сте може да бъде прилагането на снимачната проблем. Така че, докато те са въвеждане на N-малко от 1, така че трябва да е най- поне един човек в стаята. Докато те са въвеждане на N-малко от 1, След това ние ще продължим да питам отново. Моля, въведете числото на хората в стаята. Сега, след като имаме броя от хората в room-- така че може да влезе, че има са 200 души в тази стая. Тогава тук отиваме да дойде и декларира масив с размер 200. Ние сме за обявяване масив, който е достатъчно голям, за да държат 200 възрасти. Слиза, това е за контур че ще се използва за много. Така итерации през този масив, възлагане на всяко място че в масив цяло число, и след това в крайна сметка тук сме само за да се пример за итерации през този масив, за да не присвояване на стойности, но за да получите достъп до стойности. Така че тук ние виждаме, че ние се казва, след една година, лице% аз ще бъда% I-годишна възраст, където първият% I е I плюс 1. Така че аз е този индекс променлива. И вторият% I ще бъде на стойност, съхранена в масива възрасти плюс 1. Така че това е само един плюс, защото ние сме saying-- това плюс 1, възрасти I плюс 1. Това плюс 1 е само защото ние сме казвайки, след една година на лицето ще бъде този стар. Така че, защо е това аз плюс 1? Защо имаме плюс 1 до там? Да. Да. Така че не забравяйте масиви са нула индексира. Така че, ако ние отпечатвате това в продължение на някой, който да се чете само на изхода, След това най-вероятно те искат да видят нещо като човек, един, човек номер едно, ще бъде на 20 години. Лице номер две ще бъде на 15 години. Те Предпочитам да не види човек Номер на нула е на 15 години. Така че съставянето на този и просто виждам какво тя изглежда like-- Създаване малко пространство. Направи възрасти компилира. Работещи възрасти. Виждаме брой хора в помещението. Така че аз ще кажа, че има трима души в стая. Възраст на човек номер едно, нека да кажем, 15, 20, 25. И сега аз ще кажа една година от Сега те ще бъдат 16, 21, 26. Нека да видим, че това работи с п, която не е равна на 3. Така че, ако кажа, броя на хората, е 5, една, два, три, две, едно, след една година те ще бъдат две, три, четири, три, две години. Така че бих могъл точно както лесно да бъде п 10,000. Сега аз ще се седи тук за доста а по време на въвеждане на възраст, но това работи. Така че сега в паметта някъде ние имаме масив от размер 10 000, така в крайна сметка 40 000 байта, защото има четири байта за всеки от тези числа. Така че има един набор от размер на 10 000, където можем съхраняване на възраст между тези 10000 души. Всичко е наред. Въпроси за нищо от това? Да. Какво става, ако ви е дал отрицателно число? Нека да видим какво ще стане. Така че в този конкретен номер case-- от хората в помещението, отрицателна един. Той отхвърля това, защото тук ние се случи да се борави с факта, че, ако п е по-малко от една отиваме да попитам отново. Ако се опитате да обявят масив от отрицателна размер, това обикновено не работи. Така че нека да се опитаме. Нека да игнорира каквото стойност те вход за п и само да кажа, INT възрасти отрицателен. Нека да видим дали той дори компилира. Не съм сигурен. Не. Така възрасти, е декларирано като масив с отрицателен размер. Така че предварително признава масив може да не да бъде на отрицателна размер и го отхвърли. Сега, ако не се справя това не се прави линия, докато правилно, ако ние не се проверка ако п е по-малко от 1-- нека кажем просто не са имали това на всички и вместо това ние просто вземете цяло число. Без значение какъв е, че е цяло число, декларираме масив от този размер. Така че компилаторът не може вероятно се оплакват сега. Ако аз съставят this-- така че не мога да се оплача, защото не може да знае, че аз съм ще влезе отрицателно число, който може да бъде невалиден. За всичко, което знае, бих могъл Въведете положително число, което е напълно валидно. Така че аз си представите, ако въведете отрицателна 1 хора в стаята, сегментацията на вина. Така че, OK. Така че нека да добавите този върна само го пазят това, което първоначално е било. Така направи възрасти. Сега, ако искам да опитам отрицателна age-- така че нека кажа, че има пет души в стаята. Възраст на човек номер едно е отрицателна 4, лице на три е равна на нула, лице three-- OK. Така че тук, на една година, считано от сега, човек номер един ще бъде отрицателен 3-годишна възраст. Така че най-вероятно няма смисъл. Но това е само защото търсите в кода всичко, което правим иска GetInt. Сега, ако бяхме имали GetPositiveInt функция или бяхме просто направи това сортиране на същата линия, докато там долу, След това ще работи перфектно добре. Но в този конкретен случай, ние просто не го правят се случи да бъде работа с отрицателни стойности. Всякакви други въпроси за масиви? ДОБРЕ. Така че ние сега сме виждали масиви. И ние ще трябва да използвате това за аргументи от командния ред. Така че в определен проблем two-- Знам, че много от вас може би все още се работи по проблема набор един, но проблем зададете два предстои. В определен проблем две, ти започваш да се Трябва да се занимават с конци, решетки, и аргументи от командния ред. Така че какви са аргументите на командния ред? Сега, можете да видите тук долу на Малко закачка за точно това, което е ще се случи. Виждаме инт Основната, с включени argc, струнен argv скоби. Така че първо нека се опитаме да интерпретираме това, което е, че се опитвам да кажа. Сега, OK. Така че в командния ред трябва да бъде привикване към някои от тези команди сега, и вие вероятно сте тичам CD в ​​терминала преди. Така че, ако ние кажем сд pset1, знаете ли, че, които трябва да се променя в директорията pset1. Сега забелязвам, че никога не сте писмена програма, подобно преди. Всяка програма, която си написал, вие ще се кандидатира, да речем, точка, наклонена черта Mario, дот наклонена черта алчни, и след това го може да ви пита за вход. Сега, това не е това, което промяна на указателя прави. Когато стартирате сд, тя не след това казват, която директория искате да сд в? Вместо това, можете просто да кажа, сд pset1, и той просто отива в указателя pset1. Така че по подобен начин имаме и други примери. направи здрасти. Когато стартирате направи, тя не след това казват, коя програма бихте искали да направите? Можете просто да кажем, в командния ред направи здрасти. Move е друг пример. Това, че се движим в mario.c подаде до една директория. Така че сега ние знаем с този пример ние сме наистина минава два аргумента. Има mario.c като първи аргумент, и точка точка е с втория аргумент. И тогава, когато ви свършат направите, можете се види, че наистина дълъг команда line-- че наистина дълъг команда отпечатан в командния ред. Така че отдавна command-- това е само на кратка част от него, но сега имаме три аргументи от командния ред. Dot пробив на нула, здравей, и hello.c. Така че това са командния ред аргументи, аргументи че сте преминаване в командния ред, така че да не трябва да бъдат подканени когато стартирате програмата. Би било разочароващо, ако, когато сте стартирали звън тя каза: "Добре, които program-- които файл са ви съставянето? Hello.c. Какво бихте знамена искал да влиза? тире о. какво ще желаете файла да се нарече? Здравейте. Не, ти просто стартирате трясък блъскам о здравей hello.c. Така че гледам назад в това. Сега argc-- argc е броят на аргумент. Това е броят на командния ред доводи, вписани в командния ред. Е, argv-- технически на ст щандове за вектор, което означава масив. Но можете да игнорирате това. Argv-- имаме низ argv, така струнен argv скоби. Така че това е още една форма на конзоли, които не сте виждали преди. Така че сме виждали скоба нотация, когато казахме, харесват, канап и се равнява Zamyla. ите скоба 0 получава достъп до Z. характер Ние също така съм виждал скоби, когато казахме INT възрасти конзола 5. Това обявена масив с размер 5. Така че тук е версия на скоби не сме виждали преди. Така че този вид на низ argv че ще бъде напълно запознат че това ще бъде само низ. Сега скобите показват че това е масив. Така струнен argv скоби средства че argv е масив от низове. Сега технически низ е набор от символи. Така че това сега е масив от набор от символи. Но това е много по-лесно да се мисли за това като просто масив от низове. Така че, защо би скобите да са празни? Подобно, защо да не можем да кажем, конзола 5, скоба п? Да. Да. Ние не знаем колко входове там ще бъде. Така че, ако се вгледаме в примера трясък, казваме звън пробив о здравей hello.c. В този конкретен случай, там се случи да бъде три аргументи от командния ред. И така brackets-- ще видим в секунда няма да е три. Това технически е четири. Но скобите, бихме да речем, има три. Но сега, ако ние погледна ход mario.c точка точка, конзолите ние ще искате да сложите две в тях. И има много от команди, които има променлив брой на командния ред аргументи. Така че това, когато тази версия на скоба нотация показва е, че argv е масив от низове. Но ние не знаем колко струни са в този масив. И как можем тогава знаете как много струни са в масива? Това е цялата точка argc. argc ни казва колко дълго argv е. Така че последното нещо, което да съхранява в ума е, че, технически, самата команда брои за един на аргументите на командния ред. Така сд pset1, има две аргументи от командния ред. Програмата сама по себе си, сд, и след това действителния аргумент на част от него, pset1. Всяка програма, която си написал до този момент е имал един команден ред argument-- дот Слаш Mario. Това е аргумент само от команден ред. Така че сега гледа трясък блъскам о здравей hello.c. Така че това, което е argc? 4. Така argc е 4. Звън, така argv скоба 0 е трясък. argv скоба 1 е пробив 0. argv скоба 2 е здравей, и argv скоба 3 е hello.c. ОК, така че въпроси за тази, и след това ще разгледаме някои програмни примери. ДОБРЕ. Така че ние ще разгледаме най hello3.c. Така че това трябва да е запознат от един от първите в примерите имахме, когато ние просто ще кажа, здравей свят, но сега това е по-общ. Така че тук ние казваме здравей % и наклонена черта п argv скоба 1. Notice-- така нагоре до този момент, това е това, което ми се е шаблонен файл приличаше. Имах инт главната (недействителни), и след това бих направи нещо в основната функция. Сега вместо това, след като ние започнем да се занимаваме с аргументи от командния ред, ние трябва да се посочва различна форма на основната. Така че гледаш hello3 отново, основните върви да вземе два аргумента now-- инт argc, броят на аргументи от командния ред, и струнен argv скоби, действителното струни, вписани в командния ред. Така че аз отивам да се промени, че шаблон, за да отрази този факт. Сега, когато ви пиша програма, ако не го направите трябва да се вземат всяка от командния ред аргументи, тогава просто използвайте инт главната (недействителни). Но сега, когато пишете програми аргумент от командния ред, които започваш да се прави за проблем зададете two-- така че сега, че сте стартирали програми, които трябва да се вземат аргументи от командния ред, вие трябва да имате основна на тази форма. Така here-- това е голям използване Аргументът на командния ред. Така отпечатване argv 1. OK така че нека да компилирате и стартирате тази програма. Направи hello3. Обобщава. Dot наклонена черта hello3. И нека да кажем, "Роб." Hello Роб. Ако кажа, "Здравей Мария," Здравей Мария. Здравей Мария. Хана все още се казва, "здравей Maria ", защото аз не съм прави нищо с нашия argv 2. Argv 2 сега ще бъде "Хана". Argc ще бъде 3. Какво става, ако съм направил това? Така здравей нищожна. Той за кратко докосна на факта, че, технически, GetString може да върне нула, но ще получите много повече в това, което е нищожна в действителност. Но го приемам като въпрос на Фактът, че не е общо лошо. Ние направихме нещо нередно, ако това е печат на "здравей нула." И причината ние направихме Нещо не е наред is-- добре, когато аз се завтече дот наклонена черта hello3, argc беше 1. Това значи, че дължината на argv беше 1. Ако масив е с дължина 1, единствената валидна индекса е нула. И така, тук argv 1 е извън обхвата на този масив. Той е подобен на преди, когато се опитах за съхранение на 6 извън края на масива. Така че аз се опитвам да получите достъп до нещо извън броят на argv, и ние получаваме нищожна. Така че по-добра версия на това подобрение, е изрично проверка argc. Така че, ако argc е равно на 2, това означава, че ние се завтече нещо като дот наклонена черта hello3 Роб. И тя ще отпечатва "здравей Rob." Ако argc не е равно 2, а след това просто ще да не обръща внимание, каквото и да сложи по аргумент на командния ред като аргументи от командния ред. Или ако не е пускал такива изобщо, това е просто ще игнорира това и просто да кажа, "Здравей." Така че съставянето на този. Направи hello4. И работи hello4. Това по този начин за бягане, това, което трябва да бъде отпечатан? "Здравей." Здравей. Какво ще кажете за hello4 Роб? "Hello Rob." И най-накрая, здравейте Rob Maria е просто "здравей You" отново, защото не сте наистина въведете нещо, което го очаква. Въвели сте повече имена отколкото може да се справи, така че просто да просрочва Здравейте на вас поведение. Така че въпроси за тази? Или аргументи от командния ред? ОК, така че като се погледнете в още няколко примери за използване командния ред arguments-- първа ние сме argv тире 1 точка в. Така че коментарите раздават какво тази програма трябва да се прави. Но забележете now-- това за цикъл, Това съвпада точно модела Казах преди. Ние просто се случи да бъде използване argc вместо N. Сега argc е наистина п. Това е дължината на argv масива. Така се итерации над argv масив ФОРМАТ-ING всяка argv стойност. Така че, ако направя това. Направи argv 1. Той обобщава. Dot наклонена черта argv 1. Просто използвате това, разпечатки са разпръснати наклонена черта argv 1 тъй като това е единственият командния ред argument-- името на програмата. Винаги ще бъдете в least-- argc не може да бъде по-малко от една, тъй като там винаги ще най-малко да бъде името на програмата да се изпълнява. Така argv 1 Rob ще отпечата argv 1 и след това на новата линия "Роб." Така в първата итерация на този цикъл, аз е 0. Argv 0 е името на програмата. Dot наклонена черта argv 1. И тогава argv 1 е първият ми аргумент на командния ред, което е Роб. В този момент, ние сме равни на argc. Ние се измъкнат от примката и сме готови. Така че това ще работи за произволна брой аргументи от командния ред. Забележете, той отпечатва argv 0, argv 1, 2 argv, argv 3, 4 argv. И няма argv 5. argc е равно на 5. Така че най-argc-- най аз се равнява на 5, ние се измъкнат от примката. ДОБРЕ. Така интересува, че преди ние разгледаме един по-сложен пример? Така argv 2. Всичко е наред. Така че ние сме все още отпечатване аргументите на командния ред. Но сега забележите имаме вложено за контур. И така, какво е това правиш? Така че първата линия се справя точно това, което го е направил преди. Ние все още използваме цикъл всеки аргумент на командния ред, но сега това второ loop-- ние сме също виждал нещо подобно преди. Когато той е бил над итерации Zamyla отпечатване Z-A-M-Y-L-A. Така че този втори контур за инт й се равнява 0, п е равно strlen на argv скоба аз. Така че нека първо да мисля за the-- нека да ходи сам. Нека да помислим какво би компютъра направя, ако аз се завтече тази програма, както току-що Дот Слаш argv тире 2. Така че, ако аз се завтече този код, а след това argc ще бъде равен на 1. И низ argv-- има само ще бъде един форум в argv, и това ще бъде равна на Дот Слаш argv 2-- името на програмата. ОК, така че сега аз равна на 0, аз по-малко от 1, т плюс плюс за инт й е равна на 0, п е равно strlen на argv скоба 0, така че в първото повторение на този цикъл. argv скоба 0 е точка наклонена черта argv 2. Така че това, което е дължината на този низ? Е, точка, наклонена черта A-R-G-V тире 2. Така strlen на която ще бъде 8. Така J е 0, п е равно на 8. Докато й е по-малко от 8, J ++. И с това ние ще се отпечатване на един символ, който е argv скоба аз попадне й. Така че единственият I е равна на нула. Ние все още само една аргумент от командния ред. В тази първа итерация на линия за, ние сме ще бъде печат argv скоба скоба 0 0. И тогава й се случва да увеличите. И ние ще печат argv скоба 0 скоба 1. И тогава argv скоба 0 скоба 2. Така че това е първата ни среща на многомерни масиви. Не забравяйте, че по-рано казах че argv е технически масив от масиви от символи. Така че тук, ако кажа нещо подобно низ и се равнява на argv скоба аз, и тогава казах, а скобата й, това ще бъде осъществяването на едно и също нещо. Сега, вие сте виждали и скобата й преди. Това е просто достъп до к-ти характер на тази струна. Така че с това, ние сме все по к-ти характер на аз-ти argv. Така че това, което трябва в крайна сметка този изход? Направи argv 2. Той обобщава. Dot наклонена черта argv 2. "Rob Maria Хана" и да ни даде някаква стая. Така ние виждаме, че това е извеждане точка на отделен ред и наклонена черта по своя собствена линия и по своя собствена линия. Той е извън всяко отпечатване индивидуален характер на всеки аргумент на командния ред. И тогава между тях, защото на тази нова линия ние сме отпечатване тук долу, в между тях, че ще отпечата на нов ред. Така че това е подобно на предварителното argv таблото 1, които отпечатват всяка аргумент на командния ред, но сега ние сме отпечатване аргументите на командния ред и след това итерации през всеки характера на всеки аргумент на командния ред за да получите този изход. ДОБРЕ? Така че въпроси за тази? Едно нещо е да се отбележи, е, че командния ред arguments-- така че те са разделени с интервали като вие естествено ще очакваме от тях да бъде. Така низ може да има празни места в него. Това не е супер важно, но ако аз Исках аргумент трета от командния ред да има място в него, тогава аз Може да се каже нещо подобно. ДОБРЕ? Така че това сега все още има само трима командния ред arguments-- и 4. Dot наклонена черта argv тире 2, Роб, Мария и Хана Bloomberg. ДОБРЕ. Въпроси за това? Няма нищо по-специално за космически характер. Тя просто се случва да бъде, че командния ред третира пространството характер като как се разделят всеки аргумент. Всичко е наред. Така че тогава Проблем набор two-- ти започваш да бъде погледнете в тайна-ключ, криптография. Така, подобен на този пример видяхме от A Christmas Story, започваш да се прилагането на някои алгоритми, които, дадени съобщение, започваш да бъде в състояние за криптиране на това съобщение че само някой с този таен ключ, с който декодер пръстен, трябва да бъде в състояние да разшифрова. Така че това е стандартната версия. Ще бъдат изпълнение две различни версии. Ако се случи да погледнете в хакер издание на предприятието, отиваме да даде можете низ като този, което представлява криптирана парола. Така че вашата цел е да разбера каква е разшифрован парола. Сега това е всъщност как пароли се съхраняват в много от компютри, и то просто съхранява тази случаен низ от символи. Трябва да разбера как да получите от този случаен низ от символи до каква беше първоначалната парола. И накрая, след това проблем набор, вие трябва да е в състояние да разбере какво означава това. Така ще се научите как да дешифрирате този вид на низ. По същия начин, ако си спомняте от седмица 0, може да си видял този URL. И би трябвало да можете да разшифровате това в крайна сметка. Може да не се радваме, когато го разшифрова и кликнете върху линка. Всичко е наред. Това е всичко за днес. Така се видим следващата седмица! [ELECTRONIC за възпроизвеждане на музика]