[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.