[Играет музыка] Дэвид Малан: Ладно. Это CS50, и это конец недели 2. Мне так жаль, я не мог быть там с вами все сегодня, но вы в очень хороших руках. Позвольте мне представить CS50 собственной Роб Боуден. БОР Боуден: И, конечно, то мы должны сделать удовольствие тот факт, что он послал нам по вертикали видео и показать это. [ПРОИГРЫВАНИЕ ВИДЕО] [Играет музыка] [СЛЕДАМ] -Это Видео не сделал придется искать этот путь. Это можно было бы предотвратить. Скажите нет вертикальных видео. -Vertical Видео произойти, когда вы Держите камеру в ту сторону. Ваше видео будет в конечном глядя, как дерьмо. - [Грунт] -Есть Все больше и больше людей, пристрастившихся чтобы сделать вертикальные видео каждый день. Это никогда не треснуть или ничего, но это все еще очень плохо. Есть два различных видов люди, которые страдают с ВВС. Первая группа лечит видео они стреляют, как фотографии. Они не означают, никакого вреда. Они просто не понимают, что в то время как вы можете превратить картину, Вы не можете действительно повернуть видео. [CRASH] - [ОБЕЗЬЯНА ЗВУКИ] -The Другая группа это люди, которые не дают [бип]. -Vertical Видео синдром опасен. Кинофильмы есть всегда горизонтально. Предлагаются горизонтальные. Компьютерные экраны горизонтали. Народные глаза горизонтально. Мы не построен, чтобы смотреть видео вертикальные. Я люблю вертикальные видео. -Никто Заботится о вас. -Если Это проблема-х остановить, вы тоже начнет показывать четыре видео сразу, чтобы сэкономить полосу пропускания. -Letterboxed Вертикальные видео будет быть размером с почтовую марку. -А Он будет распространяться во всем мире. Киноэкранах есть всегда горизонтально. Если вертикальные видео стало принято, кинотеатры должны быть высокий и тощий. -А Все кинотеатры, должны снесены и перестроены. И к тому времени, они были восстановлены, Мила Кунис будет старой и уродливой. -Birds Будет врезаться в них и умереть. -МЫ Все получают жесткой шеи от, глядя вверх. -А Никто не будет сидеть в передний ряд когда-либо снова. -Джордж Лукас переиздание звезды Войны again-- тощий издание. -Я Никогда не был в состоянии сказать, история, что я хотел сказать. Это был отличный шанс для меня, чтобы экспериментировать с новой технологией. -Ты - дебил. -Каждый Раз, когда мобильное устройство используется для запись видео, соблазн есть. Просто сказать нет. Скажи нет Джорджа Лукаса. Скажи нет старого Мила Кунис. Скажите нет вертикальных видео. -А Если вы видите кто-то делает это, скажем, "Вы не стреляют, что правильный манекен!" [Играет музыка] [КОНЕЦ ПРОСМОТРА] [Аплодисменты] [АУДИО ВЫХОД] БОР Боуден: --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. Так, оглядываясь назад на это. Теперь 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-адрес. И вы должны быть в состоянии расшифровать это в конечном итоге. Вы не могли бы быть счастливы, когда вам расшифровать ее и нажмите на ссылку. Все в порядке. Вот и все на сегодня. Так видеть вас на следующей неделе! [Электронный воспроизведения музыки]