1 00:00:00,000 --> 00:00:00,340 2 00:00:00,340 --> 00:00:01,960 >> SPEAKER 1: La oss nå rette det siste programmet. 3 00:00:01,960 --> 00:00:04,920 Og denne gangen, la oss eksplisitt tildele noe minne hvori 4 00:00:04,920 --> 00:00:06,550 brukerens input vil bli lagret. 5 00:00:06,550 --> 00:00:09,600 For å gjøre dette, la oss hone på at første kodelinje der vi erklært s 6 00:00:09,600 --> 00:00:11,590 som tidligere til å være en char-stjerne. 7 00:00:11,590 --> 00:00:14,210 Denne gangen, la oss re-olle det som følger - 8 00:00:14,210 --> 00:00:19,380 char s brakett 16, for eksempel, tett brakett. 9 00:00:19,380 --> 00:00:23,690 >> Med andre ord, la oss erklære s til ingen lenger være adressen til en karakter, 10 00:00:23,690 --> 00:00:26,610 men snarere en matrise med 16 tegn. 11 00:00:26,610 --> 00:00:30,295 På denne måten kan brukeren skrive inn opptil 15 tegn og fortsatt gi rom for 12 00:00:30,295 --> 00:00:31,570 en avsluttende null. 13 00:00:31,570 --> 00:00:35,870 La oss fortsette å spare, Compile, og Kjør dette programmet. 14 00:00:35,870 --> 00:00:40,770 Gjør scanf2 dot slash scanf2. 15 00:00:40,770 --> 00:00:45,100 La oss nå skrive en streng som hallo, og vi takket for hallo. 16 00:00:45,100 --> 00:00:46,440 >> Nå, det er fortsatt et problem. 17 00:00:46,440 --> 00:00:50,140 Jeg bare skrev inn hallo, som er bare fem tegn, pluss en til null 18 00:00:50,140 --> 00:00:50,445 terminator. 19 00:00:50,445 --> 00:00:53,610 Det etterlater oss med bare et behov for seks bytes. 20 00:00:53,610 --> 00:00:56,740 >> Men dessverre, bare vi bevilget 16. totalt. 21 00:00:56,740 --> 00:01:01,305 Så hvis brukeren faktisk typer i 16 tegn, eller 17, eller flere hundre 22 00:01:01,305 --> 00:01:04,410 tegn, er vi fremdeles ikke kommer til å har nok plass i minnet for 23 00:01:04,410 --> 00:01:05,400 brukerens input. 24 00:01:05,400 --> 00:01:07,750 Og faktisk, dette er det som gjør få brukerundersøkelser så 25 00:01:07,750 --> 00:01:08,940 vanskelig generelt. 26 00:01:08,940 --> 00:01:12,270 Og ja, dette er grunnen til at vi implementert get strengfunksjon i den første 27 00:01:12,270 --> 00:01:13,900 plass i CS50 bibliotek - 28 00:01:13,900 --> 00:01:16,900 å finne ut hvordan de skal håndtere de situasjoner der brukeren skriver inn 29 00:01:16,900 --> 00:01:19,710 flere tegn enn vi først antatt. 30 00:01:19,710 --> 00:01:21,750 >> Oppriktig, uten helt omskriving av dette programmet, 31 00:01:21,750 --> 00:01:23,290 det er ingen ren løsning. 32 00:01:23,290 --> 00:01:26,970 Snarere hva vi ville ha å gjøre er å få et tegn fra brukeren en om 33 00:01:26,970 --> 00:01:28,860 gang, igjen og igjen. 34 00:01:28,860 --> 00:01:32,510 Og på hvert punkt hvis vi innser at vi er ut av minnet, ville vi måtte på 35 00:01:32,510 --> 00:01:36,450 det punktet gå tilbake i og omfordele litt mer minne, kopiere brukerens 36 00:01:36,450 --> 00:01:39,400 tidligere innspill fra vår første blings hukommelse i den nye, 37 00:01:39,400 --> 00:01:40,810 større del av minnet. 38 00:01:40,810 --> 00:01:44,610 Og deretter gjenta denne prosessen på nytt og igjen inntil brukeren er ferdig levert 39 00:01:44,610 --> 00:01:45,860 sin inngang. 40 00:01:45,860 --> 00:01:48,246