>> [Музички]
>> Даг LLOYD: Во ред, па ајде зборува за аргументите на командната линија.
Значи, досега во текот прилично многу на сите ваши програми
веројатно почнаа како this-- int главната неважечки.
Ние сме биле собирање корисникот влез ако ни треба
во нашите програми, како што се на Програма Марио, на пример,
од во-програма инструкциите.
Ние нема да имаат потреба да се измени декларацијата на главната,
бидејќи наместо во внатрешноста на главниот ние само да кажам, може да ја јавите за да добиете Инт.
Колку големи сакаш пирамидата да биде?
Или може да се јавите за да добиете float-- колку промени
ќе ми е излез на корисникот?
>> Постои и друг начин, иако, и ако сакаме на нашите корисници
за да може да се обезбедат податоци за нашата програма
за време на извршувањето, наместо на време на програмата се извршува,
ова е занемарлива разлика, но понекогаш многу корисна една,
ни треба нова форма на изјаснување главни.
Ние не можеме да го користите int главната неважечки ако сакаме да собере и други податоци во командната линија
кога корисникот ќе работи на програмата, па оттука и аргументите на командната линија.
>> Да се ​​соберат овие командната линија аргументи од страна на корисникот,
промена на вашата изјава за Главната да изгледа како this-- int
Главната, отворен paren, int argc, запирка, стринг argv, загради,
и потоа отворете кадрава голема заграда.
Па што значи тоа веќе?
Па, ние ќе се најдат во два параметри, или аргументи, или влезови до главна.
Еден, цел број наречен argc, а другиот е што?
Тоа е низа од стрингови, нели?
Гледаме дека плоштадот заградата нотација.
Тоа е низа на стрингови.
Тоа не е индивидуална стринг, тоа е низа на стрингови.
И овие два аргументи, argc и argv, Ви овозможи да знаат што на податоци на корисникот
има обезбедено на командната линија и како многу работи што
дадени на командната линија.
Доста корисни работи кои треба да се работи со.
>> Argc залага за пребројувањето аргумент, и што треба да знаете, од начинот на кој,
дека можете да се јавите argc што и да го сакаат тоа.
Можете да се јавите argv што и да сакаше.
Ова се само конвенционални имиња кои се користат за them-- брои аргумент,
и како што ќе видиме во една секунда, аргумент вектор, argv.
Но, вие не мора да ги нарекуваат argc и argv, ако не го сакаат,
но конвенционално, тоа е она што го правиме.
>> Значи во секој случај, argc, пребројувањето на аргумент.
Тоа е променлива цел број тип и така, како може да се очекува, ако се имаат две работи
дека ние ќе треба да се најдат дознаете што овие се напечатени
и колку работи на корисникот внесе, argc е
нема да ни кажете колку работи на корисникот внесе.
Па тоа ви дава голем број на аргументи на командната линија на корисникот
пишуваат, кога на програмата беше погубен.
Значи, ако вашата програма е кандидира точка црта алчен,
и во внатрешноста на вашиот алчен програмирате вашата главна функција
има декларација int главната int argc на, стринг argv квадратни загради, а потоа
argc во тој случај е еден.
Сега забележите ние не се смета како многу нешта
на корисникот внесе по името на програмата.
Самото име на програмата се надева како аргумент командната линија.
>> Па dot црта алчен, во тој случај, argc е еден.
Ако на корисникот внесе коса црта алчен 1024 CS50 на командната линија, argc во тој случај
ќе биде три.
И знаеме ова, бидејќи начинот на кој дека поделбата помеѓу жиците
е откриен е дали има простор, или јазиче,
или нешто слично помеѓу нив.
Така било која сума на бел простор, т.н., помеѓу вредностите внеле командната линија
покажува колку ги има.
Па dot црта алчен простор 1024 простор CS50, argc, во тој случај, е три.
>> Argv е вектор на аргумент.
Вектор, патем, е само друг збор за низа,
и ова е низа кој ги зачувува жици.
Еден низа на елемент, кој е конците дека корисникот всушност
напишан на командната линија кога на програмата беше погубен.
Сега, како што е случај со која било низа, ако
потсетиме од нашата дискусија низи, на првиот елемент на argv
секогаш ќе се најде во argv квадратни заградата нула.
Тоа е првиот индекс на argv низа.
Така што will-- и во фактот, дека волјата секогаш да биде името на програмата,
секогаш ќе се наоѓа на argv квадратни заградата нула.
>> Последен елемент од argv е секогаш се наоѓаат argv во квадратни загради argc минус еден.
Гледате ли зошто?
Се сеќавам колку елементи постојат во оваа низа.
Добро, знаеме that-- тоа е argc број на елементи.
Ако на корисникот внесе три работи во на командната линија, argc е три.
Туку затоа што во в, кога ние работиме со низи, секој елемент на низата,
или, поточно, индекси на низа, се почне од нула.
Ако имаме три елементи во нашата низа, имаме елемент на argv нула,
елемент на argv еден, и елемент на argv две.
Нема елемент во argv три, како и низа на големината три.
Па тоа е зошто во последните елемент на argv може секогаш
да се најдат на argv плоштад загради argc минус еден.
>> Значи, да се претпостави корисникот извршува алчен програмата како follows--
ако тие тип во dot командната линија црта алчен простор 1024 простор CS50,
и за која било причина ние сме веќе се подготвени нашите алчни програма
да ги знаат и да работат со овие аргументите на командната линија.
Ние не претходно кога работевме од тоа за алчните проблем,
но да речеме сега сме изменета тоа, така што тоа го правиме процес
аргументите на командната линија на некој начин.
Во овој случај, argv нула е точка црта алчен.
Што е argv еден?
Па, тоа е 1024, така?
Тоа е 1024, но тука е навистина важно distinction--
се сеќаваш податочен тип на argv?
>> Тоа продавници жици, нели?
Но, изгледа дека 1024 е целобројна вредност.
Ова е навистина важно обележја, и е, всушност,
се случува да стане нешто што вие Може да се судрите во подоцнежните проблеми.
Се што е во argv е чуваат како стринг.
Значи содржината argv нечиј се стринг еден, нула, два, четири,
која се состои од оние четири карактери.
Тоа е како ако на корисникот внесе еден, нула, два, четири
како поединечни букви или знаци.
Тоа не е цел број 1024, и така да не може директно
работи со него, велејќи int 1.000, или а int x е еднаква argv еден минус 24.
>> Интуитивно, може да се размислува за тоа како што е, во ред, и тоа е 1.024 минус 24,
така што x е еднаква на 1.000.
Но, всушност, тоа не е случај, бидејќи еден argv е стринг.
Стринг 1024.
Сега таму е функција која може да биде користи за претворање на жици за да се цели броеви.
Јас нема да го расипат за вас сега, но сигурен сум дека Zamyla
ќе бидеме среќни да ви кажам за тоа во на можи за иден проблем.
Но вие исто така може да се најде изговор проблеми like--
мене, функции кои би да го направите ова во однос на 50,
ако одите на прирачник можете да најдете функција што
ќе се направи оваа реализација за вас.
Но, повторно, во можи за иден проблем,
Zamyla ќе бидат среќни да ви кажам каква функција
тоа е дека ќе се конвертира стринг 1024 до број 1024.
>> Добро, па се пресели на.
Ние сме опфатени нашите argv нула, ние сме опфатени argv еден.
Што има во argv две?
CS50.
Дека еден е веројатно прилично очигледен.
Што има во argv три?
И повторно, ние навистина не знам, нели?
Имаме низа од три димензии, тоа е како многу елементи на корисникот
внесе во командната линија, па ако одиме на argv три,
ние сме сега пречекорување од границите на нашата низа.
Компајлерот ќе нека го направите ова, нема интуитивен проблем со тоа,
но во однос на она што се случува, всушност, да се случи, ние навистина не знам.
Тоа зависи од она што е лоциран на меморијата каде
argv три ќе се очекува да биде.
И така на крај да завршиме да побегне Шкот бесплатно.
Почесто од не, особено кога си работат со argv наспроти
на било која друга низа тоа е во нашата програма,
ние сме веројатно нема да страдаат сегментација вина. Значи, повторно,
Бидете сигурни дека нема да ги преминат границите на вашиот низи, особено argv,
даден висок степен на значење во вашите програми.
>> Јас сум Даг Лојд.
Ова е CS50.