>> [Musikwiedergabe]
>> DOUG LLOYD: Okay, also lassen Sie uns sprechen über Kommandozeilenargumente.
So, so weit im Verlauf ziemlich viel alle Ihre Programme
Wahrscheinlich haben begonnen wie this-- int main nichtig.
Wir haben das Sammeln Benutzereingaben, wenn wir es brauchen
in den Programmen, wie zum Beispiel das Mario Programm beispielsweise
von in-Programm fordert.
Wir haben nicht erforderlich zu modifizieren die Erklärung der wichtigsten,
denn statt im Inneren des Haupt wir nur sagen, dass Sie es nennen, um int zu erhalten.
Wie groß wollen Sie die Pyramide zu sein?
Oder Sie können es nennen zu bekommen float-- wie viel Veränderung
sollte ich an den Benutzer ausgegeben?
>> Es ist eine weitere Möglichkeit, obwohl, und wenn wir unseren Besuchern möchten
in der Lage, zu liefern Informationen zu unserem Programm
zur Laufzeit statt, während das Programm ausgeführt wird,
eine subtile Unterscheidung, aber manchmal ein sehr nützliches,
Wir brauchen eine neue Form der Erklärung der wichtigsten.
Wir können nicht mit int main nichtig, wenn wir wollen sammeln, andere Daten auf der Kommandozeile
wenn der Benutzer das Programm ausführt, damit Kommandozeilenargumente.
>> Um diese Befehlszeilen sammeln Argumente von dem Benutzer,
ändern Sie Ihre Erklärung Haupt wie this-- int suchen
Haupt, offene paren, int argc, Komma, String argv, eckigen Klammern,
und öffnen Sie dann geschweifte Klammer.
Also, was bedeutet, dass bereits das?
Nun sind wir in zwei Parametern vorbei, oder Argumente oder Eingänge zum Haupt.
Eine, eine ganze Zahl genannt argc, und der andere ist was?
Es ist ein Array von Strings, nicht wahr?
Wir sehen, dass eckigen Klammern.
Es ist ein Array von Strings.
Es ist nicht eine einzelne Zeichenfolge, es ist ein Array von Strings.
Und diese zwei Argumente argc und argv, können Sie wissen, welche Daten der Benutzer
hat in der Befehlszeile zur Verfügung gestellt und wie viele Dinge, die sie
an der Befehlszeilen vorgesehen.
Hübsches nützlichen Dingen zu arbeiten.
>> Argc steht für Argument Zahl, und Sie sollten wissen, nebenbei bemerkt,
dass man argc nennen was auch immer Sie es wollen.
Sie können argv, was Sie wollten nennen.
Dies sind nur konventionelle Namen dass wir für them-- Argument Zahl,
und wie wir in einem zweiten zu sehen, Argumentvektor, argv.
Aber Sie müssen nicht, sie zu nennen argc und argv, wenn Sie nicht wollen, um,
aber konventionell, das ist, was wir tun.
>> Wie auch immer, argc, das Argument Count.
Es ist eine ganze Zahl Variable vom Typ und so, wie Sie erwarten, wenn wir zwei Dinge
dass wir gehen, um sein Auffinden herauszufinden, was diese eingegeben werden
und wie viel Zeug das Benutzer eingegeben ist argc
gehen, um uns zu sagen, wie viel stopfen den Benutzer eingegeben.
Also es gibt Ihnen eine Reihe von Befehlszeilenargumente Benutzer
eingegeben, wenn das Programm ausgeführt wurde.
Also, wenn Ihr Programm ist laufen dot Slash gierig,
und Innenseite der gierigen programmieren Sie Ihre Hauptfunktion
hat die Deklaration int main int argc, String argv eckigen Klammern, dann
Argc in diesem Fall eins ist.
Jetzt bemerken wir es nicht tun zählen, wie viele Dinge,
der Benutzer nach dem Programmnamen eingegeben haben.
Der Programmname selbst zählt als Befehlszeilenargument.
>> So dot Slash gierig, in Dann ist argc eins.
Wenn der Benutzer eingegeben Strich gierigen 1024 CS50 in der Befehlszeile in diesem Fall argc
würde drei sein.
Und wir wissen das, weil die Art und Weise dass die Aufteilung zwischen den Saiten
erfasst wird, ob gibt es einen Raum oder eine Registerkarte,
oder so etwas zwischen ihnen.
So dass jede Menge an Leerraum, so genannte, zwischen den Werten typisierten Befehlszeilen
gibt an, wie viele es sind.
So dot Slash gierig Raum Raum 1024 CS50, Argc, in diesem Fall drei ist.
>> Argv ist das Argument, Vektor.
Vector, übrigens, ist nur ein anderes Wort für ein Array,
und dies ist ein Array dass speichert Zeichenfolgen.
Ein String pro Element, das ist Zeichenfolgen, die der Benutzer tatsächlich
in der Befehlszeile eingegeben wenn das Programm ausgeführt wurde.
Jetzt, wie in dem Fall bei jedem Array, wenn Sie
erinnern von unserer Diskussion Arrays, das erste Element des argv
wird immer gefunden werden bei argv eckige Klammer Null.
Das ist der erste Index des argv Array.
So dass will-- und in der Tat, dass Wille immer den Namen des Programms,
wird immer gefunden werden argv eckige Klammer Null.
>> Das letzte Element von argv wird immer gefunden bei argv eckigen Klammern argc minus eins.
Sehen Sie, warum?
Denken Sie daran, wie viele Elemente gibt es in diesem Array.
Nun, wir wissen, es ist dass-- Argc Anzahl von Elementen.
Wenn der Benutzer eingegeben drei Dinge an Die Befehlszeilen ist argc drei.
Aber weil in C, wenn wir arbeiten Arrays, wobei jedes Element des Arrays,
oder vielmehr die Indices das Array, beginnen bei Null.
Wenn wir drei Elemente in unserem Array, haben wir ein Element an argv Null,
ein Element, argv eins, und ein Element in argv zwei.
Es gibt kein Element an argv drei, und ein Array der Größe drei.
Also, warum der letzte Element argv können jeder
bei argv Quadrat gefunden werden Klammern argc minus eins.
>> Nehmen wir also an die Benutzer führt das gierige Programm als follows--
wenn sie in der Kommandozeile eingeben dot Slash gierig Raum 1024 Raum CS50,
und aus irgendeinem Grund wir haben bereits unsere gierigen Programm vorbereitet
zu wissen, und die Arbeit mit diesen Befehlszeilenargumente.
Wir haben bisher noch nicht, wenn wir gearbeitet Sie für die gierigen Problem,
aber lassen Sie uns sagen, dass wir jetzt haben modifiziert es ist so, dass wir Prozess
die Befehlszeilenargumente in gewisser Weise.
In diesem Fall argv Null ist dot Strich gierig.
Was ist in der argv ein?
Nun, es ist 1024, nicht wahr?
Es ist 1024, aber hier ist eine wirklich wichtig distinction--
Sie den Datentyp des argv erinnern?
>> Es speichert Zeichenfolgen, nicht wahr?
Aber es sieht aus wie 1024 ist ein ganzzahliger Wert.
Dies ist ein wirklich wichtiger unterschieden, und ist eigentlich
gehen, um etwas zu werden, dass man vielleicht in späteren Probleme stoßen.
Alles in argv ist als Zeichenfolge gespeichert.
So Inhalte argv eigenen sind die String eins, null, zwei, vier,
aus diesen vier Figuren.
Es ist, als ob der Benutzer eingegeben eins, null, zwei, vier
als einzelne Buchstaben oder Zeichen.
Es ist nicht die ganze Zahl 1024 und so können Sie direkt nicht kann
mit ihr arbeiten mit den Worten: int 1000 oder eher int x gleich argv eins minus 24.
>> Intuitiv könnte man daran denken wie, OK, gut, es ist 1.024 minus 24,
so ist x gleich 1,000.
Aber in der Tat, das ist nicht der Fall, weil argv einem ist ein String.
Der String 1024.
Jetzt gibt es eine Funktion, sein kann verwendet werden, um Strings in Zahlen umzuwandeln.
Ich werde nicht verderben es für Sie jetzt, aber ich bin sicher, dass Zamyla
wird Sie gerne darüber in erzählen Die Komplettlösung für eine zukünftige Problem.
Aber finden Sie auch Probleme like-- Entschuldigung
mir, das wäre Funktionen tun dies in Bezug 50,
wenn Sie im Referenzhandbuch zu gehen Sie eine Funktion feststellen, dass
wird diese Umwandlung für Sie.
Aber noch einmal, in der Komplettlösung für ein zukünftiges Problem,
Zamyla werden, glücklich zu sein Ihnen sagen, was Funktion
es ist, dass wird zu konvertieren die String 1024 bis 1024 die ganze Zahl.
>> In Ordnung, so bewegen auf.
Wir haben unsere argv Null bedeckt, wir argv einen abgedeckt habe.
Was ist in argv zwei?
CS50.
Dass man es wahrscheinlich ziemlich selbsterklärend.
Was ist in argv drei?
Nun wieder, wir wissen nicht wirklich, oder?
Wir haben eine Reihe von drei Größe, das ist, wie viele Elemente der Benutzer
in der Befehlszeile eingegeben, so dass, wenn wir gehen, um drei argv,
wir jetzt überschreiten die Grenzen unser Angebot.
Der Compiler wird Lassen Sie uns dies zu tun, es gibt keine intuitive Problem mit ihm,
aber in Bezug auf tatsächlich, was los ist passiert, wissen wir nicht wirklich wissen.
Es hängt davon ab, was bei der Erinnerung, wo befindet,
argv drei würde erwartet werden kann.
Und so konnten wir am Ende immer ungeschoren davon kostenlos.
Wahrscheinlich ist, insbesondere, wenn Sie mit argv arbeitet im Gegensatz
zu einem anderen Array das ist in unserem Programm,
wir sind wahrscheinlich zu leiden einen Segmentation Fault. Also noch einmal,
Achten Sie darauf, die Grenzen zu überschreiten Ihrer Arrays, insbesondere argv,
aufgrund seiner hohen Grad an Bedeutung in Ihren Programmen.
>> Ich bin Doug Lloyd.
Dies ist CS50.