[Играет музыка] ДАГ Lloyd: Ладно, давайте говорить о аргументов командной строки. Так, до сих пор в ходе довольно много всего из ваших программ вероятно начал как this-- Int основной пустоту. Мы собирали ввод пользователем, если нам это нужно в наших программах, таких, как Программа Марио, например, по-программы в подсказок. Мы не нужно изменить декларация основной, потому что вместо внутри основного мы просто сказать, что вы можете назвать это, чтобы получить Int. Как большой вы хотите пирамида быть? Или вы можете назвать это, чтобы получить float-- как много изменений я должен выводится пользователю? Существует еще один способ, хотя, и если мы хотим, чтобы наши пользователи чтобы быть в состоянии обеспечить Данные нашей программе во время выполнения, а не время Программа работает, тонкое различие, но иногда очень полезным, нам нужна новая форма декларирования основной. Мы не можем использовать INT основной пустоту, если мы хотим, чтобы собирать другие данные в командной строке когда пользователь запускает программу, следовательно аргументы командной строки. Для сбора этих командной строки Аргументы от пользователя, изменить декларацию Основной выглядеть this-- Int Основные, открытые Парень, INT ARGC, запятая, Строка ARGV квадратные скобки, а затем открыть фигурную скобку. Итак, что же это значит уже? Ну, мы передаем в двух параметров, или аргументы, или входы в основной. Один из них, целое называется ARGC, а другой есть что? Это массив строк, верно? Мы видим, что обозначения квадратная скобка. Это массив строк. Это не отдельная строка, это массив строк. И эти два аргумента, ARGC и ARGV, позволяют знать, что данные пользователя предоставил в командной строке и как много при условии, в командной строке. Довольно полезные вещи для работы. ARGC выступает за количеством аргументов, и вы должны знать, кстати, что вы могли бы назвать ARGC все, что вы хотите. Вы можете позвонить в ARGV, что вы хотели. Таковы лишь обычные имена что мы используем для them-- количеством аргументов, и, как мы увидим в секунду, Аргумент вектор, ARGV. Но вы не должны называть их ARGC и ARGV, если вы не хотите, чтобы, но условно, это то, что мы делаем. Так или иначе, ARGC, количество аргументов. Это переменная числом типа и так, а Вы могли бы ожидать, если у нас есть две вещи что мы собираемся находить , что они набрали и сколько Наполните пользователь вводит, ARGC является собираюсь рассказать нам, сколько набить пользователь ввел. Так что это дает вам ряд Аргументы командной строки пользователь набрали, когда программа была выполнена. Так что, если ваша программа запустить точка слэш жадный, и внутри вашей жадный запрограммировать основную функцию имеет декларации Int Int основной ARGC, Строка ARGV квадратные скобки, то ARGC в этом случае является одним. Теперь обратите внимание, мы не Посчитайте, сколько вещей пользователь вводит после имени программы. Само название программы рассчитывает в качестве аргумента командной строки. Так точка слэш жадный, в В этом случае, ARGC один. Если пользователь вводит слэш жадный 1024 CS50 в командной строке, ARGC в этом случае будет три. И мы знаем, что это потому, что путь что разделение между строк обнаружен ли есть пространство, или вкладку, или что-то подобное, что между ними. Таким образом, любой объем белого пространства, так называемые, между значениями набрал командной строки показывает, сколько есть. Так точка слэш жадных пространство пространство 1024 CS50, ARGC, в этом случае, равно трем. ARGV вектор аргумент. Вектор, кстати, как раз другое слово для массива, и это является массивом который хранит строки. Один строка для каждого элемента, который является струны, что пользователь действительно введены в командной строке когда программа была выполнена. Теперь, как и в случае с любого массива, если вы Напомним, из нашего обсуждения массивы, первый элемент ARGV всегда будет найден в ARGV квадратных скобках нулевой. Это первый индекс массива ARGV. Так что will-- и в самом деле, что воля всегда быть название программы, всегда будет расположен на ARGV квадратная скобка равна нулю. Последний элемент ARGV всегда находится в ARGV квадратных скобках ARGC минус один. Вы видите, почему? Помните, как много элементов существуют в этом массиве. Ну, мы знаем, что это that-- ARGC количество элементов. Если пользователь вводит три вещи командная строка, ARGC три. Но потому, что в C, когда мы работаем с массивами, каждый элемент массива, или, скорее, индексы массив, начать с нуля. Если у нас есть три элемента в наших Массив, у нас есть элемент в ARGV нулевой, элемент в ARGV одной, и элемент в ARGV два. Там нет элемента ARGV на три, и массив размера три. Так вот почему последний элемент ARGV всегда можете можно найти на площади ARGV Кронштейны ARGC минус один. Итак, давайте предположим, что пользователь выполняет жадный программа, как follows-- если они введут в командной строки точка сократить жадный пространство пространство 1024 CS50, и по какой причине мы в уже подготовили нашу программу жадный знать и работать с ними Аргументы командной строки. Мы не делали раньше, когда мы работали на ней жадным проблемы, но, скажем, сейчас мы изменены так, что мы делаем процесс аргументы командной строки в какой-то мере. В этом случае, ARGV нулю это точка слэш жадный. Что ARGV одним? Ну, это 1024, не так ли? Это 1024, но вот Очень важно distinction-- Вы помните тип данных ARGV? Он хранит строки, верно? Но, похоже, 1024 является целым числом. Это действительно важно, различие, и на самом деле станет то, что вам может столкнуться в более поздних проблем. Все в ARGV является хранится в виде строки. Так содержание ARGV своей являются Строка одним, ноль, два, четыре, состоящую из четырех символов. Это как если бы пользователь ввел Один из них, равно нулю, два, четыре как отдельные буквы или символы. Это не целое число 1024, и поэтому вы не можете напрямую работать с ним, сказав, INT 1000, или а INT х равен ARGV один минус 24. Интуитивно, можно подумать, что из а, ладно, хорошо, что это минус 1,024 24 так х равен 1,000. Но на самом деле, это не так, потому что ARGV один строкой. Строка 1024. Теперь есть функция, которая может быть используется для преобразования строк в целые числа. Я не буду портить это для вас сейчас, но я уверен, что Zamyla будут рады рассказать вам об этом в прохождение игры для будущей проблемы. Но вы также можете найти Проблемы like-- оправдание мне, функции, которые сделать это в отношении 50, если вы идете в справочном руководстве Вы можете найти функцию, которая сделает это преобразование для вас. Но, опять же, в руководстве для будущего проблемы, Zamyla будут рады скажу вам, что функция это то, что будет преобразовывать строка от 1024 до целого числа 1024. Ладно, так как двигаться дальше. Мы рассмотрели нашу нулю ARGV, мы рассмотрели ARGV один. Что в ARGV два? CS50. Тот, вероятно, довольно очевидно. Что в ARGV трех? Ну опять же, мы на самом деле не знаю, правильно? У нас есть массив размером три, Вот как много элементов пользователь введены в командной строке, так что если мы идем в ARGV три, мы теперь переступая Границы нашего массива. Компилятор позволит нам это сделать, нет интуитивно проблема с ним, но с точки зрения фактически что происходит чтобы это произошло, мы не знаем. Это зависит от того, что находится в памяти, где ARGV три можно было бы ожидать, чтобы быть. И таким образом, мы могли бы закончить уйти безнаказанным бесплатно. Скорее всего, нет, особенно, когда вы работаете с ARGV, в отличие чтобы любой другой массив это в нашей программе, мы, вероятно, будет страдать ошибки сегментации. Итак, еще раз, быть уверены, что не выходят за границы Ваши массивов, особенно ARGV, учитывая его высокую степень Важность в ваших программах. Я Дуг Ллойд. Это CS50.