>> SPEAKER 1: Lad os nu ordne det sidste program.
Og denne gang, lad os eksplicit tildele en del af hukommelsen, hvori
brugerens input vil blive gemt.
For at gøre det, så lad os slibe på det første linje kode, hvor vi erklærede s
tidligere at være en char stjerne.
Denne gang, lad os re-erklære det således -
char s konsollen 16, for eksempel, tæt beslag.
>> Med andre ord, lad os erklære s til ingen længere være en adresse af en karakter,
men snarere en vifte af 16 tegn.
På denne måde kan brugeren indtaste op til 15 tegn og stadig give plads til
et null-terminator.
Lad os gå videre til Gem, sammenstille, og Kør dette program.
Gør scanf2 dot skråstreg scanf2.
Lad os nu skrive en streng som hej, og vi takkede for hej.
>> Nu er der stadig et problem.
Jeg kun har skrevet i hej, hvilket kun er fem tegn, plus 1 til null
terminatoren.
Det efterlader os med kun et behov for seks bytes.
>> Men desværre kun vi, tildelt 16 i alt.
Så hvis brugeren rent faktisk typer i 16 tegn eller 17 eller flere hundrede
tegn, er vi stadig ikke kommer til at har nok plads i hukommelsen til
brugerens input.
Og i virkeligheden er det, hvad der gør få input fra brugeren, så
vanskeligt i almindelighed.
Og ja, det er derfor vi implementeret get string-funktionen i den første
sted i CS50 bibliotek -
at finde ud af, hvordan man håndterer dem, situationer, hvor brugeren skriver i
flere tegn, end vi oprindeligt forventet.
>> Helt ærligt, uden helt omskrive programmet,
der er ingen ren løsning.
Snarere, hvad vi ville have at gøre er at få en karakter fra brugeren én ad
tid, igen og igen.
Og på hvert punkt, hvis vi indser, at vi er tør for hukommelse, ville vi nødt til på
dette punkt gå tilbage og omfordele nogle mere hukommelse ved at kopiere brugerens
tidligere input fra vores første bid hukommelse i den nye,
større luns af hukommelse.
Og derefter gentage denne proces igen og igen, indtil brugeren er færdig give
hans eller hendes input.