>> SPEAKER 1: La oss nå rette det siste programmet.
Og denne gangen, la oss eksplisitt tildele noe minne hvori
brukerens input vil bli lagret.
For å gjøre dette, la oss hone på at første kodelinje der vi erklært s
som tidligere til å være en char-stjerne.
Denne gangen, la oss re-olle det som følger -
char s brakett 16, for eksempel, tett brakett.
>> Med andre ord, la oss erklære s til ingen lenger være adressen til en karakter,
men snarere en matrise med 16 tegn.
På denne måten kan brukeren skrive inn opptil 15 tegn og fortsatt gi rom for
en avsluttende null.
La oss fortsette å spare, Compile, og Kjør dette programmet.
Gjør scanf2 dot slash scanf2.
La oss nå skrive en streng som hallo, og vi takket for hallo.
>> Nå, det er fortsatt et problem.
Jeg bare skrev inn hallo, som er bare fem tegn, pluss en til null
terminator.
Det etterlater oss med bare et behov for seks bytes.
>> Men dessverre, bare vi bevilget 16. totalt.
Så hvis brukeren faktisk typer i 16 tegn, eller 17, eller flere hundre
tegn, er vi fremdeles ikke kommer til å har nok plass i minnet for
brukerens input.
Og faktisk, dette er det som gjør få brukerundersøkelser så
vanskelig generelt.
Og ja, dette er grunnen til at vi implementert get strengfunksjon i den første
plass i CS50 bibliotek -
å finne ut hvordan de skal håndtere de situasjoner der brukeren skriver inn
flere tegn enn vi først antatt.
>> Oppriktig, uten helt omskriving av dette programmet,
det er ingen ren løsning.
Snarere hva vi ville ha å gjøre er å få et tegn fra brukeren en om
gang, igjen og igjen.
Og på hvert punkt hvis vi innser at vi er ut av minnet, ville vi måtte på
det punktet gå tilbake i og omfordele litt mer minne, kopiere brukerens
tidligere innspill fra vår første blings hukommelse i den nye,
større del av minnet.
Og deretter gjenta denne prosessen på nytt og igjen inntil brukeren er ferdig levert
sin inngang.