>> [Jouer de la musique]
>> DOUG LLOYD: Très bien, nous allons donc parler des arguments de ligne de commande.
Donc, jusqu'à présent dans le cadre jolie bien tous vos programmes
ont probablement commencé comme this-- void main int.
Nous avons recueilli des entrée de l'utilisateur, si nous en avons besoin
dans nos programmes, tels que le Mario programme, par exemple,
par invites en cours de programme.
Nous avons pas eu besoin de modifier la déclaration du principal,
parce qu'au lieu de nous principale à l'intérieur juste dire, vous pouvez appeler pour obtenir int.
Quelle est la taille que vous voulez la pyramide de l'être?
Ou vous pouvez appeler pour obtenir float-- combien le changement
devrais-je sortie à l'utilisateur?
>> Il ya un autre chemin si, et si nous voulons que nos utilisateurs
pour être en mesure de fournir les données à notre programme
à l'exécution de tout lieu le programme est exécuté,
une distinction subtile mais parfois très utile,
nous avons besoin d'une nouvelle forme de déclarant principal.
Nous ne pouvons pas utiliser void main int si nous voulons recueillir d'autres données à la ligne de commande
lorsque l'utilisateur exécute le programme, donc les arguments de ligne de commande.
>> Pour recueillir ces commandes en ligne les arguments de l'utilisateur,
modifier votre déclaration de principale pour ressembler this-- int
principales, paren ouvertes, int argc, virgule, argv chaîne, crochets,
puis ouvrez accolade.
Alors qu'est-ce que cela veut dire déjà?
Eh bien, nous passons à deux paramètres, ou des arguments, ou des entrées à principale.
One, un entier appelé argc, et l'autre est ce?
Il est un tableau de chaînes, pas vrai?
Nous voyons que la notation de support carré.
Il est un tableau de chaînes.
Il est pas une chaîne individuelle, il est un tableau de chaînes.
Et ces deux arguments, argv et argc, vous permettra de savoir quelles données l'utilisateur
a fourni à la ligne de commande et combien de choses ils
fourni à la ligne de commande.
Choses assez utiles pour travailler avec.
>> Argc signifie un nombre d'arguments, et vous devez savoir, par la manière,
que vous pourriez appeler argc tout ce que vous voulez.
Vous pouvez appeler argv que vous vouliez.
Ce sont juste des noms classiques que nous utilisons pour eux-- nombre d'arguments,
et comme nous le verrons dans un second, vecteur d'argument, argv.
Mais vous n'êtes pas obligé de les appeler argc et argv si vous ne voulez pas,
mais classique, qui est ce que nous faisons.
>> Donc de toute façon, argc, le nombre d'arguments.
Il est une variable de type entier et ainsi, comme vous pourriez vous attendre, si nous avons deux choses
que nous allons trouver ce que ceux-ci sont tapés
et combien la substance utilisateur a tapé, argc est
va nous dire combien farcir l'utilisateur a tapé.
Donc, il vous donne un certain nombre de arguments de ligne de commande utilisateur
tapé lorsque le programme a été exécuté.
Donc, si votre programme est exécuter dot slash gourmand,
et à l'intérieur de votre gourmande programmer votre fonction principale
a la déclaration int int argc principale, chaîne argv crochets, puis
argc dans ce cas est un.
Maintenant remarquons nous ne faisons pas compter combien de choses
l'utilisateur a tapé après le nom du programme.
Le nom du programme lui-même compte comme un argument de ligne de commande.
>> Donc dot slash gourmand, en ce cas, argc est un.
Si l'utilisateur a tapé slash gourmande 1,024 CS50 à la ligne de commande, argc dans ce cas
serait de trois.
Et nous le savons parce que la manière que la division entre les cordes
est détectée est de savoir si il y a un espace, ou une patte,
ou quelque chose comme ça entre eux.
Ainsi, toute quantité d'espace blanc, soi-disant, entre les valeurs tapé en ligne de commande
indique combien il y.
Donc dot réduire l'espace gourmand 1024 l'espace CS50, argc, dans ce cas, est de trois.
>> Argv est le vecteur d'argument.
Vector, en passant, est juste un autre mot pour un tableau,
et cette matrice est une qui stocke des chaînes.
Une chaîne par élément, qui est les cordes que l'utilisateur fait
tapé à la ligne de commande lorsque le programme a été exécuté.
Maintenant, comme dans le cas avec un tableau, si vous
rappeler de notre discussion tableaux, le premier élément de argv
va toujours être trouvé argv au crochet zéro.
Voilà le premier indice du tableau argv.
Alors que will-- et, en fait, que volonté toujours être le nom du programme,
sera toujours situé à argv crochet zéro.
>> Le dernier élément de argv se trouve toujours au argv crochets argc moins un.
Voyez-vous pourquoi?
Rappelez-vous comment de nombreux éléments exister dans ce tableau.
Eh bien, nous savons qu'il est that-- Numéro argc d'éléments.
Si l'utilisateur a tapé trois choses à la la ligne de commande, argc est de trois.
Mais parce que dans c, lorsque nous travaillons avec des tableaux, chaque élément du tableau,
ou plutôt les indices de la matrice, commencer à zéro.
Si nous avons trois éléments dans notre tableau, nous avons un élément à argv zéro,
un élément à un argv, et un élément à argv deux.
Il n'y a aucun élément à argv trois, et un tableau de taille trois.
Voilà pourquoi la dernière élément de argv pouvez toujours
se trouve sur la place de argv supports argc moins un.
>> Supposons donc que l'utilisateur exécute le programme gourmand que follows--
si ils tapent dans la dot de ligne de commande réduire l'espace gourmand 1024 espace CS50,
et pour une raison quelconque, nous avons déjà préparé notre programme gourmand
de connaître et de travailler avec ceux-ci arguments de ligne de commande.
Nous ne l'avons pas déjà quand nous avons travaillé sur elle pour le problème gourmand,
mais disons que nous avons maintenant modifié de telle sorte que nous ne traitons
les arguments de ligne de commande en quelque sorte.
Dans ce cas, argv zéro slash dot est gourmand.
Quel est argv un?
Eh bien, il est 1024, pas vrai?
Il est 1024, mais voici une distinction-- vraiment important
Vous souvenez-vous du type de argv de données?
>> Il stocke des chaînes, non?
Mais il semble que 1 024 est une valeur entière.
Ceci est un très important distinction, et est en fait
va devenir quelque chose que vous pourraient rencontrer des problèmes plus tard.
Tout dans argv est stocké comme une chaîne.
Donc, le contenu de argv One sont le chaîne un, zéro, deux, quatre,
constitué de ces quatre caractères.
Il est comme si l'utilisateur a tapé une, zéro, deux, quatre
que des lettres ou des caractères individuels.
Il est le nombre entier 1 024, et ainsi vous ne pouvez pas directement
travailler avec elle en disant int 1000, ou plutôt int x est égal à un moins 24 argv.
>> Intuitivement, on pourrait penser de cette comme, OK, il est bien moins 1024 24,
si x est égal à 1,000.
Mais en fait, ce ne est pas le cas, parce argv un est une chaîne.
La chaîne à 1024.
Maintenant, il ya une fonction qui peut être utilisé pour convertir des chaînes en nombres entiers.
Je ne vais pas gâcher pour vous maintenant, mais je suis sûr que Zamyla
sera heureux de vous dire à ce sujet dans la procédure pas à pas pour un problème futur.
Mais vous pouvez également trouver problèmes de l'excuse
moi, fonctions qui seraient faire en référence 50,
si vous allez au guide de référence vous pouvez trouver une fonction qui
fera de cette conversion pour vous.
Mais encore une fois, dans la procédure pas à pas pour un problème futur,
Zamyla sera heureux de vous vous dire quelle fonction
il est qui va convertir le string 1024 à l'entier 1024.
>> Très bien, alors passer.
Nous avons couvert notre zéro argv, nous avons couvert un argv.
Ce qui est dans argv deux?
CS50.
Celui-là est probablement assez explicite.
Ce qui est dans argv trois?
Eh bien encore une fois, nous ne savons pas vraiment, non?
Nous avons un tableau de taille trois, voilà comment de nombreux éléments à l'utilisateur
tapé à la ligne de commande, Donc, si nous allons à argv trois,
nous sommes maintenant outrepasser les limites de notre tableau.
Le compilateur nous faisons cela, il n'y a aucun problème avec elle intuitive,
mais en termes de ce qui se passe réellement se passer, nous ne savons pas vraiment.
Cela dépend de ce qui est situé à la mémoire dans laquelle
argv trois seraient censés être.
Et ainsi nous pourrions nous retrouver obtenir loin scot libre.
Plus que probable, en particulier lorsque vous travaillez avec argv par opposition
à tout autre tableau qui est dans notre programme,
nous allons probablement souffrir une erreur de segmentation. Donc encore une fois,
être sûr de ne pas dépasser les limites de vos tableaux, en particulier argv,
compte tenu de son degré élevé de importance dans vos programmes.
>> Je suis Doug Lloyd.
Ceci est CS50.