1 00:00:00,000 --> 00:00:00,560 2 00:00:00,560 --> 00:00:02,460 >> DAVID J. MALAN: Låt oss ta saker ett steg längre, nu. 3 00:00:02,460 --> 00:00:05,450 Antag att jag inte bara vill för att skriva ut alla mina programmets 4 00:00:05,450 --> 00:00:06,630 kommandoradsargument. 5 00:00:06,630 --> 00:00:10,490 Men jag istället vill skriva ut alla enskilda tecken i varje 6 00:00:10,490 --> 00:00:14,060 mina kommandoradsargument, ett per linje, så att när du kör det här 7 00:00:14,060 --> 00:00:17,490 program, jag ser bara en ström av Tecknen på skärmen som 8 00:00:17,490 --> 00:00:20,700 kollektivt är från min sekvens av kommandoradsargument. 9 00:00:20,700 --> 00:00:21,980 >> Tja, hur kan jag göra detta? 10 00:00:21,980 --> 00:00:26,540 Jag kan hålla intakt min slinga från tidigare varvid jag iterativ från i upp till 11 00:00:26,540 --> 00:00:30,060 ARGC för att integrera över kommandoradsargument själva. 12 00:00:30,060 --> 00:00:34,460 Men nu, i varje iteration av att slinga, jag behöver nu iterera över varje 13 00:00:34,460 --> 00:00:38,550 av tecken eller tecken i en specifik sträng. 14 00:00:38,550 --> 00:00:40,620 Så för att göra det, jag behöver en till ögla. 15 00:00:40,620 --> 00:00:42,090 >> Låt oss lägga det. 16 00:00:42,090 --> 00:00:46,890 för int, låt oss kalla det j, lika med 0. 17 00:00:46,890 --> 00:00:49,980 Nu kommer jag att behöva integrera fram till längden av den 18 00:00:49,980 --> 00:00:52,310 aktuell sträng i argv. 19 00:00:52,310 --> 00:00:55,910 Så låt mig ge mig en annan lokal variabel, vi kallar det n, och ange 20 00:00:55,910 --> 00:01:00,120 som är lika med den stränglängd av aktuella argument, som kommer att bli 21 00:01:00,120 --> 00:01:04,230 finns i argv fäste jag semikolon. 22 00:01:04,230 --> 00:01:08,500 >> Låt mig nu iterera från j upp tills n följt av en 23 00:01:08,500 --> 00:01:10,400 inkrementera på varje iteration. 24 00:01:10,400 --> 00:01:13,850 Låt oss nu skriva ut enskilda tecken på skärmen. 25 00:01:13,850 --> 00:01:21,920 Printf% c denna gång följt av en ny linje, nära citationstecken, kommatecken, och nu har jag 26 00:01:21,920 --> 00:01:25,565 behöver den j: te tecken i den i: te argumentet. 27 00:01:25,565 --> 00:01:30,240 >> Så för att komma åt det, jag kan helt enkelt ange ARV fäste i till 28 00:01:30,240 --> 00:01:32,050 få den i: te argumentet. 29 00:01:32,050 --> 00:01:36,140 Och då kan jag dyka i en nivå djupare och göra ett sekundärt index för 30 00:01:36,140 --> 00:01:40,420 fäste j, nära parentes, semikolon, Spara. 31 00:01:40,420 --> 00:01:43,610 Och låt oss nu sammanställa och köra programmet. 32 00:01:43,610 --> 00:01:46,630 >> Gör ARGV2 - 33 00:01:46,630 --> 00:01:48,440 inte riktigt vad jag hade förväntat mig. 34 00:01:48,440 --> 00:01:50,740 Låt oss bläddra fram till den första av dessa felmeddelanden. 35 00:01:50,740 --> 00:01:54,540 Och i rött här, ser vi fel, implicit förklara biblioteksfunktion 36 00:01:54,540 --> 00:01:56,290 strlen med typ - 37 00:01:56,290 --> 00:01:57,380 åh, vänta lite. 38 00:01:57,380 --> 00:02:00,340 Detta är första gången jag har använt strlen, och jag inte förutsåg 39 00:02:00,340 --> 00:02:04,970 vill ha det först, så jag tog inte med rubrikfilen som förklarar 40 00:02:04,970 --> 00:02:06,290 en längd funktion sträng. 41 00:02:06,290 --> 00:02:09,419 >> Så på toppen av min fil, minns, jag har CS50.h. 42 00:02:09,419 --> 00:02:11,080 Jag har standard io.h. 43 00:02:11,080 --> 00:02:14,500 Men det visar sig, och jag vet detta från läsa dokumentationen, att jag behöver 44 00:02:14,500 --> 00:02:18,320 en tredje header-fil om jag, faktiskt, vill använda strlen funktion. 45 00:02:18,320 --> 00:02:22,760 Den funktionen deklareras i string.h. 46 00:02:22,760 --> 00:02:25,230 >> Låt oss spara om filen, kompilera och köra. 47 00:02:25,230 --> 00:02:32,360 48 00:02:32,360 --> 00:02:35,570 Och den här gången, vi gör inte bara se var och en av argumenten. 49 00:02:35,570 --> 00:02:40,470 Vi ser i stället var och en av de argument ett tecken i taget. 50 00:02:40,470 --> 00:02:43,165