[Грає музика] Девід Малан: Гаразд. Це CS50, і це кінець тижня 2. Мені так шкода, я не міг бути там з вами всі сьогодні, але ви в дуже хороших руках. Дозвольте мені представити CS50 власної Роб Боуден. БОР Боуден: І, звичайно, то ми повинні зробити задоволення той факт, що він послав нам по вертикалі відео і показати це. [ВІДТВОРЕННЯ ВІДЕО] [Грає музика] [СЛІДАМИ] -Це Відео не зробив доведеться шукати цей шлях. Це можна було б запобігти. Скажіть немає вертикальних відео. -Vertical Відео статися, коли ви Тримайте камеру в ту сторону. Ваше відео буде в кінцевому дивлячись, як лайно. - [Грунт] -Є Все більше і більше людей, що пристрастилися щоб зробити вертикальні відео щодня. Це ніколи не тріснути або нічого, але це все ще дуже погано. Є два різних видів люди, які страждають з ВВС. Перша група лікує відео вони стріляють, як фотографії. Вони не означають, ніякої шкоди. Вони просто не розуміють, що в той час як ви можете перетворити картину, Ви не можете дійсно повернути відео. [CRASH] - [ОБЕЗЬЯНА ЗВУКИ] -The Інша група це люди, які не дають [біп]. -Vertical Відео синдром небезпечний. Кінофільми є завжди горизонтально. Пропонуються горизонтальні. Комп'ютерні екрани горизонталі. Народні очі горизонтально. Ми не побудований, щоб дивитися відео вертикальні. Я люблю вертикальні відео. -Ніхто Піклується про вас. -Якщо Це проблема-х зупинити, ви теж почне показувати чотирьох відео відразу, щоб заощадити смугу пропускання. -Letterboxed Вертикальні відео буде бути розміром з поштову марку. -А Він буде поширюватися в усьому світі. Кіноекранах є завжди горизонтально. Якщо вертикальні відео стало прийнято, кінотеатри повинні бути високий і худий. -А Всі кінотеатри, повинні знесені і перебудовані. І до того часу, вони були відновлені, Міла Куніс буде старої і потворною. -Birds Буде врізатися в них і померти. -Ми Всі отримують жорсткої шиї від, дивлячись вгору. -А Ніхто не буде сидіти в передній ряд коли-небудь знову. -Джордж Лукас перевидання зірки Війни again-- худий видання. -Я Ніколи не був в змозі сказати, історія, що я хотів сказати. Це був відмінний шанс для мене, щоб експериментувати з новою технологією. -Ти Ривок. -Кожний Раз, коли мобільний пристрій використовується для запис відео, спокуса є. Просто сказати ні. Скажи ні Джорджа Лукаса. Скажи ні старого Міла Куніс. Скажіть немає вертикальних відео. -А Якщо ви бачите хтось робить це, скажімо, "Ви не стріляють, що правильний манекен!" [Грає музика] [КІНЕЦЬ ПЕРЕГЛЯДУ] [Оплески] [AUDIO OUT] БОР Боуден: --simple форма криптографії, який є в основному шифрування і дешифрування секретних повідомлень. Так от у нас є дуже простий іграшкою. А ідея зовнішнє кільце обертається навколо внутрішнього кільця. І ви можете бачити, може бути, якщо я збільшити в, that-- важко побачити. Але, як і кількість 1-- добре, що переїхав. 1 номер карти до листа X, № 2 карти в листі Дж Неймовірно складно не пропускати вперед. Лист 2 карти в J. Номер 3 відображає до D. Так з цим кільцем ви можете дати хтось повідомлення 1, 2, 3. Для якоїсь причини хочу сказати їм XJD. Але ви можете дати їм деякі повідомлення чисел, і, якщо вони є це кільце, вони може розшифрувати те, що ви намагаєтеся сказати. Таким чином, ви, можливо, бачили це Конкретним прикладом криптографії раніше, якщо навколо Різдвяного сезону ви дивилися Різдвяна історія. Якщо ви ніколи не бачили це, то просто включити TBS в буквальному сенсі в будь-який час в переддень Різдва, тому що вони просто показати його спина до спини щоб повернутися до спина до спини весь день. І ставлення це відео. [ВІДТВОРЕННЯ ВІДЕО] -Будьте Відомо всім і кожному, що Ральф Паркер справжнім призначений членом Маленька Сирота Енні Таємний коло і має право на усіма почестями і вигоди відбувається з ним. Підписано сирітка Енні. Контрассигнуется П'єр Андре чорнилом! Нагороди та переваги вже у віці дев'яти років! [Кричати від радіо] -Давай. Давайте покінчимо з цим. Мені не потрібно все, що джаз про контрабандистів і піратів. Слухай, завтра ввечері з заключна пригоди Чорного піратський корабель. Тепер, прийшов час для Секретне повідомлення Енні для вас члени таємного Круга. Пам'ятайте Діти, тільки члени Енні секретної Круга може декодувати секретне повідомлення Енні. Пам'ятайте, Енні залежно від вас. Встановіть штифти В2. Ось повідомлення. 12. 11. 2. -Я У моєму першому секретній нараді. -25. 14. 11. 18. 16. -Ой, П'єр перебуває у великій голосової сьогодні. Я міг би сказати, що сьогодні ввечері Повідомлення було дійсно важливо. -3. 25. Це повідомлення від самої Енні. Пам'ятайте, не кажіть нікому. -П'ять Секунд потому, я в тільки кімната в будинку, де хлопчик дев'яти міг сидіти на самоті і декодування. Ага! B! Я пішов до іншого. Є. Перше слово "бути". С. Він доносився простіше. У. 25. Це R. -Давай, Ральфі! Я повинен йти! -Я Б прямо, Ма! Ось здорово. Т. О. "Будьте впевнені, що" - будьте впевнені, до чого? Що сирітка Енні намагається сказати? Будьте впевнені, що до чого? -Randy Повинен піти! Чи будете ви будь ласка вийти? -Добре, Мама! Я буду прямо! Я отримую ближче ,. Напруга було жахливо. Що це було? Доля планети може висіти на волосині! -Ralphie, Ренді повинен йти! -Я Зараз вийду, з глузду з'їхати! Майже там! Мої пальці літали. Мій розум був сталевий капкан. Кожен пір вібрує. Це було майже ясно! Так. Так. Так. Так. Будьте впевнені, щоб пити Ovaltine. Ovaltine? Вошивого комерційний? Сучий син. [КІНЕЦЬ ПЕРЕГЛЯДУ] БОР Боуден: Так от, як Ovaltine відноситься до криптографії. В основному CS50 тільки рекламується Ovaltine, таким чином, ми могли бути Вошивої комерційних Ovaltine. Добре. Так що тепер поточна інформатика. Запам'ятати мене на понеділок ми зупинилися дайвінг глибше рядків. Таким чином, ми маємо справу з рядок "Zamyla." І ми були визнання той факт, що ми можемо розглядати "Zamyla" у вигляді послідовності символів. І пам'ятайте, що ми дізналися, позначення кронштейна. Так, якщо це зберігалися в рядку "s", потім якби ми сказали їй кронштейн 0, що б вкажіть капіталу Z. лист І якби ми сказали їй кронштейн 1, що буде вказувати на перший нижній регістр A, і так далі до ів кронштейна 5, який буде вказувати на останню а. Тепер згадайте, що Довжина цього рядка 6, але індекси в рядку є Від 0 до 5, Z через які тривають. Так це зараз вписується в загальну картину пам'яті комп'ютера, оперативної пам'яті. Так десь програма, яка ви працюєте комп'ютер потрібно пам'ятати, Zamyla десь у пам'яті. Так я можу бути добровольцем? Так, будь ласка. І те, що ваше ім'я? ДІН: Дін. БОР Боуден: Дін? Приємно познайомитися, Дін. Так що приїжджай сюди і ми збираємося, щоб ви малювати на нашому хороший відмінний макет пам'яті. Тепер я хотів би думати про пам'ять однієї довгої смуги байтів, але тільки для цілей відображення ми будемо просто зліва направо, зверху вниз. ДОБРЕ? Так що я збираюся показати program-- Getstrings.c. І так все це програма робити просить чотири його струни від користувача з GetString, а потім друк все, що перший рядок увійшов було. Ми ігноруючи дві через чотири. ДОБРЕ. Так тут now--, коли Я перший запит S1. Таким чином, ви комп'ютер. І ви реалізуєте GetString. Таким чином, ви запросити рядок з мені, і я кажу, ОК, Дін. Дайте рядок "Дін". Так десь в пам'яті у вас потрібно пам'ятати "Діна". Так що пишіть його в пам'яті десь. Ідеальний. ДОБРЕ. Так що тепер ми s2. І S2 буде запит на GetString. Так що я збираюся ввести рядок. Я збираюся ввести "Ханна". Так ввести "Ханна" десь у пам'яті. Так. А-Н. ОК, так що тепер S3. І це буде ще один прошу GetString. І ось тепер ввести "Марія". Добре. А тут ще одна остання Запит на GetString, S4. Таким чином, я не знаю. Як щодо ми йдемо з antidisestablishmentarianism. Так що введіть у пам'ять. Так. Так просто робити "Боб". ДОБРЕ. Так що тепер explain-- чому залишити ці прогалини? Чому у вас це поле порожнім простір тут, тут, і тут? Так. Так помітити, коли я йду друкувати s1-- тому, якщо ми був біг "Ханна" Право поряд з "Дін", як ми знаємо, коли рядок "Дін" закінчується? Так друку рядка s1 може мати просто надруковані "DeanHannahMariaRob" якщо він не має ніякого поняття , Коли "Дін" насправді закінчується. Добре. Таким чином, в пам'яті те, як ми насправді представляють цей кінець рядка це з косими нульовий. Так це простір саме те, що ми хотіли. Вона повинна бути обернена коса риска нулю. Це буде зворотний слеш нуль, і це буде зворотний слеш нулю. І ви можете мати казкові приз за те, що ідеальний волонтер. Візьміть стрес м'яч! ДОБРЕ. Так цей символ зворотної косої риси нуля як ми, вказуючи на закінчення рядка. Це те, як, коли будь Дана програма хоче надрукувати рядок, це how-- пам'ятаю ми дізналися, функція StrLen минулого тижня? Довжина рядка? Це те, як довжина рядка може визначити, як довго рядок. Він просто тримає ітерації над символами до тих пір, поки знаходить Обернена коса риска символу нуля. Таким чином, важливо зрозуміти про зворотна коса риса характеру нульовий в це представляється усіма нулями в бітах. Так зауважити, що це відрізняється від нульового символу. Таким чином, символ нуля, якщо ви пам'ятаєте, у прикладі, що він дав наприкінці лекції, де персонажі карту , Метою яких, як капітал Карт до 65. Нижнього регістру в карти до 97. Рядкові б буде 98. Таким чином, число 0 відображається, метою яких я не знаю, у верхній частині моєї голови. 44 або 45. Десь у цьому регіоні. Таким чином, характер 0 є фактична кількість. Але зворотний слеш нуль карти для всіх нульових бітів. Так що різниця між зворотної косої межі нульовий, які ми будемо називати нульовий термінатор. Там це розходження між Обернена коса риска нулю, а символ нуля. Добре. Тому говорити трохи більше про рядках. Отже, ми бачимо тут, як це він буде закладений в пам'яті. Так ця ідея рядків у вигляді послідовності з characters-- так офіційним комп'ютер sciency термін для послідовності є масивом. Таким чином, ми могли б назвати рядок масив символів. І є насправді інші дані типи, які ми можемо зробити з масивів. Таким чином, щоб мотивувати це, розглянемо на прикладі. Ми будемо називати його ages0.c я буду скопіюйте і вставте наш шаблон. ДОБРЕ. Таким чином, у цій програмі те, що ми хочу зробити, це взяти вік з трьох студентів у процесі. Таким чином, ми знаємо, що INT age-- і тепер я збираюся сказати, 0. Таким чином, ви, можливо, захочете, щоб сказати age1, але для цілей, ми побачимо дуже скоро, Я скажу INT age0 дорівнює GetInt. Так само заклик до GetInt що ми використовували I не буває, щоб бути спонукаючи кажучи, "дайте мені вік." Але тільки просить його. І age1 дорівнює GetInt. І INT age2 дорівнює GetInt. Так, знову ж таки, три студенти, але в кінцевому рахунку змінна індекси є age0 через age2. ДОБРЕ. Так ця програма буде робити все, що ми хочемо з age0, age1 і age2, але ця програма в кінцевому рахунку, працює протягом трьох студентів. ДОБРЕ. Так що тепер, якщо я хочу четверо студентів? Ну, я збираюся мати, щоб повернутися в моєму коді, змініть коментар, і тепер у нас є Int Age3 дорівнює GetInt. ДОБРЕ. Так хто бачить тут проблеми? В чому проблема з такого роду установки? Так. Так. Так ми створюємо змінна для кожного студента. Тепер, працює, але в кінцевому рахунку, що, якщо я тепер сказати: "Я хочу, щоб захопити вік восьмій студентів або 16 студентів або в менш багато студентів сотні студентів в CS50 або тисячі студентів на території кампусу чи мільярди людей у ​​світі? Так в кінцевому рахунку це не є стійким. Кожен раз, коли ви бачите себе копіювання і вставки коду, як це, Ви повинні відчувати себе, як правило що є кращий шлях. Так що це, де ми вводимо декларація масиву. Тому, коли ви оголошуєте масив, це те, що загальний формат буде виглядати. Ми збираємося сказати типу. а потім ми збираємося дати ім'я цього масиву, як ми визначаємо змінну будь-якого заданого. І, нарешті, ми використовуємо Цей кронштейн позначення знову але в іншому контексті з як ми використовували його раніше. Так ось як це виглядає нормальним Оголошення змінної, що ми бачили. Таким чином, ми бачили Int х коми раніше. Ну ми могли б побачити щось як INT х дужках 5. І покласти цю ідею в Програма GetInt, що ми have-- таким чином, ми можемо реалізувати Цей таким же чином. Скажімо, в CS ми схильні використовувати п як число чогось. Так от ми збираємося зберігати чотирьох студентів. І тепер ми можемо сказати, INT віку Кронштейн НЕ N-- зовсім розумію yet-- оголосити масив з чотирьох студентів. Так, як це буде виглядати в пам'яті буде схожий на цей. Зніміть цей. І ми будемо мати десь в memory-- я покладу це там. Так десь в пам'яті. Один два три чотири. У нас є чотири цілих числа в рядку для цього масиву з чотирьох чисел. Так, в даний час, що є Розмір одного з цих ящиків? Так. Це чотири байти. Це 32 біт. Так що тепер це відрізняється з масиву, які ми бачили раніше, масив символів. У рядку кожна коробка була тільки один байт, оскільки характер тільки один байт. Але з масивом цілих чисел, кожне Коробка має в чотири байти того щоб відповідати весь ціле. Так що це те, що масив чотирьох Інтс буде виглядати. А потім назад в код. Тепер ми хочемо насправді магазин цілі в цьому масиві. Так що тепер це дуже, дуже, дуже загальний принцип, який в якийсь момент стати м'язова пам'ять. Так Int я дорівнює 0. я менше, ніж п. я плюс плюс. Вік кронштейн я дорівнює GetInt. Таким чином, це цикл, цей формат, Ви повинні отримати дуже звикли. Так що це, як правило, як ми будемо перебору майже будь масив. Тепер зверніть увагу такого роду пояснює, чому з самого початку у нас не було для петлі збирається на Int Я дорівнює 1, I менше або дорівнює 10. Причина в тому, що, починаючи з нульовий робить цю роботу добре з масивами. Так масиви дорівнюють нулю індексуються. Якщо цей масив має довжину 4, індекси дорівнюють 0 до 3. Так через перший ітерації цього циклу для ми збираємося бути установка вік Кронштейн 0 рівну виклику GetInt. Так сталося, що я ввести з клавіатури. На другому проході, ми установка age1 одно GetInt. По-третє прохід, age2. Заключний прохід Age3. Таким чином, якщо в першому проході циклу Я входжу до числа 4 на клавіатурі, Потім ми вставимо 4 тут. Якщо на другому проході я входжу 50, ми поставимо 50 тут. На третьому проході я міг введіть негативний 1, негативний 1, і, нарешті, якщо я входжу 0-- і Тепер пам'ятайте, що це було три індексу. Після того як ми петлі спині, я це буде збільшуватися до 4. Не я більше не менше, ніж п, який 4. І ми вирватися з петлі. Так що було б неправильно з цим? [Нерозбірливо]? АУДИТОРІЯ: [нерозбірливо] Так. Таким чином, масив має тільки чотири місця, що означає, як індекси від 0 до 3. Так що, якщо б це було так, я б приймати значення 4 в якийсь момент. вікова група 4 буде установка все, що відбувається, щоб бути тут те, що я повинен сказати, введіть 6. Це буде установка цього до 6. Але ми не знаємо, що тут. Це не пам'ять що у нас доступ. Так що, якщо ви пам'ятаєте з попередня лекція, він був роздруківки значення Zamyla і в якийсь момент він ударив цей сегментації вина. Таким чином, ви, ймовірно, буде бачити багато помилок сегментації, як ви здійснити деякі з проблемних множин. Але це один із способів, в яких Ви можете зіткнутися з сегментацію вина, коли ви починаєте доступу пам'ять таким чином, що ви не повинні бути. Таким чином, ми не мали доступу до це місце, і це помилка. Так що це краще. Тепер є ще невеликий проблема з цим кодом. І це в основному, що ми застряг на чотирьох студентів. Тепер, якщо я хочу використовувати восьмій студентів, ОК. Це не так вже страшно. Я можу піти в, змінити коментарі, а також змінити п. Тепер це буде працювати з восьми студентів. Якщо я скомпілювати і запустити це, покаже me-- він буде просити чисел протягом восьми студенти і він буде просто працювати. Але це менше, ніж ідеально підходить для потрібно перекомпілювати програму кожен раз, Я хочу, щоб змінити кількість студентів що я хочу, щоб ввести вік для. Таким чином, остаточний поліпшення по це, як ми побачимо, ми here-- збирається просити кількість людей. Тут ми маємо ряд людей в номерах або які-небудь вік людей у ​​кімнаті. Але ми збираємося просити номер людей в номері від користувача. Так що це точно такий же зроби, а цикл, який ми бачили раніше. Це точно такий же зробити щось час цикл, який ви може бути реалізації на безлічі проблем. Так що, поки вони введення п менше, ніж 1, так там повинен бути хоча б одна людина в кімнаті. Поки вони введення п менше, ніж 1, тоді ми йдемо продовжувати здавати знову. Будь ласка, введіть номер людей у ​​кімнаті. Тепер, коли у нас є число людей в room-- так що я міг увійти, що 200 людина в цій кімнаті. Тоді тут ми прийде і оголосити масив розміром 200. Ми оголосивши, що це масив досить великий, щоб тримати 200 віків. Спускаючись, це цикл що ви отримаєте дуже звикли. Так перебору масиву, присвоєння кожному місцю розташування в цьому масиві ціле, і то в кінцевому рахунку, тут ми просто отримати приклад ітерації протягом цього масиву, а не присвоювати значення, але доступ до значень. Так тут ми бачимо, що кажуть, через рік, людина% я буде% I років, де перший% я це я плюс 1. Так я це індексна змінна. І другий% я маю намір бути значення зберігається в масиві віків плюс 1. Таким чином, це плюс 1 тільки тому, що ми saying-- це плюс 1, вік I плюс 1. Це плюс 1 тільки тому, що ми кажучи, через рік людини буде цей старий. Отже, чому це я плюс 1? Чому у нас є плюс 1 є? Так. Так. Так що пам'ятайте, масиви дорівнюють нулю індексуються. Так що, якщо ми друкуємо це для хтось просто читати висновок, то, напевно, вони хочуть побачити щось як людину одного, людина номер один, буде 20 років. Людина номер два буде 15 років. Вони б не бачити обличчя номер нуль 15 років. Так компіляції це і просто подивитися, що це виглядає like-- Створити деякий простір. Зробити віці від компілює. Запуск віків. Ми бачимо, кількість людей у ​​кімнаті. Так що я буду говорити є три особи в кімнаті. Вік людини номер один, скажімо 15, 20, 25. А тепер я скажу через рік Тепер вони будуть 16, 21, 26. Давайте подивимося, що це працює з п, що не дорівнює 3. Так що, якщо я говорю, число людей 5, один, два, три, два, один, через рік вони будуть два, три, чотири, три, два роки. Так що я міг так само, як легко п 10000. Тепер я буду сидіти тут досить При вході у віці, але це працює. Так що тепер у пам'яті десь ми є масив розміром 10000, так, в кінцевому рахунку 40000 байт, тому що є чотири байти для кожного з цих чисел. Так що масив Розмір 10000, де ми можемо зберігати вік тих 10000 чоловік. Добре. Питання про будь-якому з цього? Так. Що робити, якщо ви дали негативне число? Давайте подивимося, що станеться. Таким чином, в даному конкретному числа case-- людей у ​​кімнаті, негативний. Він відхилив, що тому що тут ми, трапляється, щоб бути обробки той факт, що якщо п менше, ніж той, який ми збираємося ще раз запитати. Якщо ви спробуєте оголосити масив негативного розміру, це взагалі не працює. Так давайте спробуємо. Давайте ігнорувати всі значення вони вхід для п і просто сказати Int віці від негативного. Давайте подивимося, якщо це ще компілює. Я не впевнений. Немає. Так, вік оголошений як масив з негативним розміром. Так авансом вона визнає масив не може бути негативною розміру і відкидає його. Тепер, якщо ми не впоратися Це робіть щось час цикл правильно, якщо ми не перевіряли якщо п менше, ніж 1-- Скажімо, ми просто цього не було взагалі і замість цього ми просто захопити ціле. Незалежно від того, що число є, ми оголошуємо масив розміру. Таким чином, компілятор не може можливо, в даний час скаржаться. Якщо я скомпілювати this-- так що не можу скаржитися, тому що він не може знати, що я збирається ввести від'ємне число, які могли б бути недійсними. Для всіх він знає, я міг би ввести позитивне число, яка відмінно діє. Так я уявляю собі, якщо я входжу негативний 1 люди в кімнаті, помилки сегментації. Так добре. Так давайте додамо це назад тільки тримати його, що він спочатку був. Так що вік. Тепер, якщо я хочу, щоб спробувати негативне age-- так що давайте кажуть, що п'ять чоловік у кімнаті. Вік людини номер один негативний 4, людина трьох дорівнює нулю, людина three-- ОК. Так ось, через рік, людина число можна буде негативним 3 років. Так, ймовірно, не має сенсу. Але це тільки тому, що, дивлячись на код все, що ми робимо просить GetInt. Тепер, якщо ми мав Функція GetPositiveInt або ми просто зробили це зразок же час циклу там, то це буде працювати прекрасно. Але в даному так, ми просто не трапляється, обробки негативні значення. Будь-які інші питання про масивах? ДОБРЕ. Таким чином, ми в даний час розглядається масиви. І ми збираємося потрібно використовувати це для аргументів командного рядка. Таким чином, у проблемі встановити two-- Я знаю, багато хто з вас може ще працювати на проблеми набору один, а проблема встановити два йде вгору. У проблематика два, ви збираєтеся потрібно мати справу з рядками, масивами, і аргументи командного рядка. Так що аргументи командного рядка? Тепер, ви можете побачити вниз тут трохи тизер саме те, що буде відбувається. Ми бачимо, INT основний, Inc ARGC, Рядок ARGV дужки. Отже, спочатку давайте спробуємо інтерпретувати що це намагається сказати. Тепер, ОК. Таким чином, в командному рядку ви повинні бути звикнути до деяких з цих команд зараз, і ви, ймовірно, працювати CD в ​​терміналі перед. Так що, якщо ми говоримо кд pset1, Ви знаєте, що це повинно бути зміни в каталог pset1. Тепер зверніть увагу, що ви ніколи не написав програму, як це раніше. Кожна програма, що ви написали, Ви буде працювати, скажімо, точка слеш Маріо, точка слеш жадібний, а потім його може запитати у вас вхід. Так от, це не те, що змінити каталог робить. При запуску компакт-диск, він не те сказати, який каталог ви хочете, щоб CD в? Замість цього, ви просто говорите, CD pset1, і він просто йде в каталог pset1. Отже, подібним чином у нас є й інші приклади. зробити привіт. При запуску зробити, це не те сказати, яка програма вам хотілося б зробити? Ви просто говорите, на командного рядка зробити привіт. Переміщення є ще одним прикладом. Це той, який ми переміщення mario.c файл на один каталог. Так що тепер ми знаємо, в цьому прикладі ми дійсно проходить два аргументи. Там це mario.c в якості першого аргументу, і точка точка є другим аргументом. А потім, коли ви запускаєте зробити, вам бачити, що насправді довгу команду line-- що дуже довго команди друкується в командному рядку. Так що довго це command-- знаходиться в декількох хвилинах його частину, але тепер у нас є три Аргументи командного рядка. Штріхпунктір нулю, привіт, і 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, є два Аргументи командного рядка. Програма сама по собі, CD, а потім фактичний аргумент його частину, pset1. Будь-яка програма, що ви написали досі була однією командного рядка argument-- точка слеш Маріо. Це єдиний аргумент командного рядка. Так що тепер, дивлячись на брязкотом тире про привіт hello.c. Так що ARGC? 4. Так ARGC 4. Брязкіт, так ARGV кронштейн 0 брязкіт. ARGV кронштейн 1 тире 0. ARGV кронштейн 2 привіт, і ARGV кронштейн 3 hello.c. Отже, питання з цього, і тоді ми подивитися на деяких програмних прикладів. ДОБРЕ. Таким чином, ми будемо дивитися на hello3.c. Таким чином, це повинно бути знайоме з один з перших прикладів гр ми були, де ми б просто сказати, привіт світу, але тепер це є більш загальним. Так от, ми говоримо привіт % S зворотний слеш н ARGV кронштейн 1. Notice-- так досі це є що мій шаблон файлу виглядає. Я був Int основний (порожнечу), і то я б зробити щось у головній функції. Тепер замість цього, як тільки ми починаємо справу з аргументами командного рядка, ми повинні констатувати інша форма основною. Так, дивлячись на hello3 знову, головним буде взяти два аргументи Int now-- ARGC, кількість аргументів командного рядка, і рядок ARGV дужках, фактичне струни вступили в командному рядку. Так що я збираюся змінити, що шаблон відбити цей факт. Тепер, коли ви пишете програма, якщо ви не потрібно вживати ніяких командного рядка Аргументи, а потім просто використовувати Int основний (порожнечу). Але тепер, коли ви пишете Програми аргумент командного рядка, які Ви збираєтеся робити для задачі встановити two-- так що тепер, що ви працюєте програми, які потрібно прийняти Аргументи командного рядка, Ви повинні мати основні з цієї форми. Так here-- це великий використання аргументу командного рядка. Так друку ARGV 1. ОК так що давайте скомпілювати і запустити цю програму. Зробити hello3. Компіляція. Точка слеш hello3. І скажемо, "Боб". Привіт Роб. Якщо я кажу "привіт" Марія, Марія привіт. Привіт Марія. Ханна досі говорить, "привіт Марія, "тому що я не робити що-небудь з нашою ARGV 2. ARGV 2 тепер буде "Ханна". ARGC б 3. Що робити, якщо я це зробив? Так привіт нуль. Він коротко торкнувся тим, що, технічно, GetString може повернутися NULL, але ми отримуємо набагато більше в те, що нуль є насправді. Але прийняти його в якості питання Те, що, як правило, не погано. Ми зробили щось неправильно, якщо це друк "привіт нулю." І з цієї причини ми зробили то не так is-- добре, коли я втікав точка слеш hello3, ARGC був 1. Значить, довжина ARGV було 1. Якщо масив має довжину 1, дійсні тільки індекс дорівнює нулю. І ось ARGV 1 знаходиться за межами діапазон цього масиву. Це було схоже на раніше, коли я спробував для зберігання 6 за межами кінця масиву. Так що я намагаюся отримати доступ до де- за межами пунктам ARGV, і ми отримуємо нуль. Таким чином, краща версія це, поліпшення, явно перевірки ARGC. Так що, якщо ARGC дорівнює 2, це означає, що ми бігли щось на зразок точка слеш hello3 Роба. І він буде друкувати "привіт Роб." Якщо ARGC не дорівнює 2, то це просто буде ігнорувати все, що ви поклали в аргументі командного рядка в якості аргументів командного рядка. Або, якщо ви не клади на всіх, це просто хочу, щоб ігнорувати і просто сказати, "привіт вам." Так складанні цього. Зробити hello4. І працює hello4. Запуск це так, що повинно бути надруковано? "Привіт тобі." Привіт вам. Що про hello4 Роба? "Привіт Роб." І, нарешті, привіт Роб Марія просто "привіт Ви" знову, тому що ви дійсно не ввійти те, що він очікував. Ви ввели кілька імен ніж це могло звертатися, так що просто дефолт вітання ви поведінку. Так питання з цього приводу? Або аргументи командного рядка? Отже, беручи подивимося на ще пара прикладів використання командного рядка arguments-- в першу чергу ми ARGV тире 1 точка C. Тому коментарі віддати те, що ця програма повинна робити. Але зверніть увагу, це now-- цикл, це точно відповідає шаблону Я говорив раніше. Ми просто опинилися використовуючи ARGC замість п. Тепер ARGC дійсно п. Це довжина масиву ARGV. Так будуть ітерації по ARGV Масив Printf-ки кожного значення ARGV. Так що, якщо я можу зробити це. Зробити ARGV 1. Це становить. Точка слеш ARGV 1. Просто працює це, друк точка слеш ARGV 1 так що це був єдиний командного рядка argument-- назва програми. Там завжди буде мірою: ARGC не може бути менше, ніж один, так як завжди буде, принаймні бути ім'я програми для запуску. Так ARGV 1 Роб друкуватиме ARGV 1 а потім на новій лінії "Боб". Таким чином, у першій ітерації з цього циклу, я це 0. ARGV 0 назва програми. Точка слеш 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. Таким чином, це другий контур для Int J дорівнює 0, п дорівнює STRLEN з ARGV кронштейна I. Так давайте спочатку думати the-- давайте йти через. Давайте подумаємо, що комп'ютер буде робити, якщо я побіг цю програму, як тільки точка скоротити ARGV тире 2. Так що, якщо я побіг цей код, а потім ARGC буде дорівнювати 1. І рядок argv-- є тільки буде один індекс в ARGV, і що буде дорівнює точка скоротити ARGV 2-- назва програми. ОК, так що тепер я дорівнює 0, я менше, ніж 1, я плюс плюс для INT J дорівнює 0, п дорівнює STRLEN з ARGV кронштейна 0, так що в перший ітерація цього циклу. ARGV Кронштейн 0 точка слеш ARGV 2. Так що довжина цього рядка? Ну, підсічно точка A-R-G-V тире 2. Так StrLen того, що буде 8. Так J дорівнює 0, п дорівнює 8. Поки J менше 8, J ++. І з цим ми йдемо, щоб бути друк один символ, який є ARGV кронштейн кронштейн я J. Таким чином, тільки я нуль. Ми як і раніше є тільки один аргумент командного рядка. У цьому першій ітерації з цикл, ми буде печатка ARGV кронштейн кронштейн 0 0. І тоді J буде збільшуватися. І ми збираємося друку ARGV кронштейн кронштейн 1 0. А потім ARGV кронштейн кронштейн 0 2. Так що це наша перша зустріч багатовимірних масивів. Пам'ятайте раніше, що я сказав, що ARGV технічно масив масивів символів. Так от, якщо я сказав щось на зразок Рядок з дорівнює ARGV кронштейн I, і тоді я сказав, з кронштейн J, це буде досягнення те ж саме. Тепер, ви раніше не бачив з кронштейна J. Ось тільки отримати доступ до J-й Характер цього рядка. Так з цим, ми отримання J-й характер я-я ARGV. Так що, в кінцевому рахунку це повинно вихід? Зробити ARGV 2. Це становить. Точка слеш ARGV 2. "Роб Марія Ханна", і дати нам номер. Таким чином, ми бачимо, що це висновок точка на своїй власній лінії і слеш за власною лінією і на своїй власній лінії. Це роздруківки друг індивідуальний характер кожного аргументу командного рядка. І тоді між ними, з цієї нової лінії Ми друкуємо тут, в між ними буде друкувати новий рядок. Так що це схоже на попередній ARGV тире 1, які друкуються кожен Аргумент командного рядка, але тепер ми друку аргументи командного рядка а потім ітерації через кожен характер кожного аргументу командного рядка щоб отримати цей висновок. ДОБРЕ? Так питання з цього приводу? Одна річ, щоб відзначити, що командного рядка arguments-- таким чином, вони розділяються пробілами, як ви, природно, очікувати, щоб вони. Таким чином, рядок може містити пробіли в ньому. Це не супер важливо, але якщо я хотів аргумент третього командного рядка мати місце в цьому, то я Можна сказати, що щось на зразок цього. ДОБРЕ? Так що це ще тільки в даний час має три командного рядка arguments-- також 4. Точка слеш ARGV тире 2, Роб, Марія, і Ханна агентство Bloomberg. ДОБРЕ. Питання з цього приводу? Там немає нічого особливого про прогалину. Це просто трапляється, що командного рядка відноситься символ пробілу про те, як ви розділите кожен аргумент. Добре. Отже Проблема набір two-- ви збираєтеся бути дивлячись на шифрування з секретним ключем. Так, аналогічної тій, що, наприклад ми бачили з Різдвяна історія, Ви будете здійсненні деяких алгоритми, які, враховуючи повідомлення, Ви збираєтеся бути в змозі для шифрування, що повідомлення що тільки хтось з цією таємниці Ключ, з тією декодера кільця, повинні бути в змозі розшифрувати. Так що це стандартне видання. Ви будете реалізації дві різні версії. Якщо вам трапиться, щоб поглянути в хакер edition-- зараз, ми збираємося, щоб дати Ви рядок, як це, який являє собою зашифрований пароль. Так ваша мета, щоб з'ясувати, що розшифровані пароль. Тепер це дійсно хау паролі зберігаються в багатьох комп'ютерах, і він просто зберігає це випадкова послідовність символів. Ви повинні з'ясувати, як отримати від цієї випадкової рядки символів до того, що вихідний пароль був. І, нарешті, після цього Проблема набір, ви повинні бути в змозі зрозуміти, що це означає. Таким чином, ви дізнаєтеся, як розшифрувати це свого роду випадкової рядка. Точно так само, якщо ви пам'ятаєте, від тижня 0, ви, можливо, бачили це URL-адресу. І ви повинні бути в змозі розшифрувати це в кінцевому підсумку. Ви не могли б бути щасливі, коли вам розшифрувати її та натисніть на посилання. Добре. Ось і все на сьогодні. Так бачити вас на наступному тижні! [Електронний відтворення музики]