1 00:00:00,000 --> 00:00:00,340 2 00:00:00,340 --> 00:00:01,960 >> SPEAKER 1: Lad os nu ordne det sidste program. 3 00:00:01,960 --> 00:00:04,920 Og denne gang, lad os eksplicit tildele en del af hukommelsen, hvori 4 00:00:04,920 --> 00:00:06,550 brugerens input vil blive gemt. 5 00:00:06,550 --> 00:00:09,600 For at gøre det, så lad os slibe på det første linje kode, hvor vi erklærede s 6 00:00:09,600 --> 00:00:11,590 tidligere at være en char stjerne. 7 00:00:11,590 --> 00:00:14,210 Denne gang, lad os re-erklære det således - 8 00:00:14,210 --> 00:00:19,380 char s konsollen 16, for eksempel, tæt beslag. 9 00:00:19,380 --> 00:00:23,690 >> Med andre ord, lad os erklære s til ingen længere være en adresse af en karakter, 10 00:00:23,690 --> 00:00:26,610 men snarere en vifte af 16 tegn. 11 00:00:26,610 --> 00:00:30,295 På denne måde kan brugeren indtaste op til 15 tegn og stadig give plads til 12 00:00:30,295 --> 00:00:31,570 et null-terminator. 13 00:00:31,570 --> 00:00:35,870 Lad os gå videre til Gem, sammenstille, og Kør dette program. 14 00:00:35,870 --> 00:00:40,770 Gør scanf2 dot skråstreg scanf2. 15 00:00:40,770 --> 00:00:45,100 Lad os nu skrive en streng som hej, og vi takkede for hej. 16 00:00:45,100 --> 00:00:46,440 >> Nu er der stadig et problem. 17 00:00:46,440 --> 00:00:50,140 Jeg kun har skrevet i hej, hvilket kun er fem tegn, plus 1 til null 18 00:00:50,140 --> 00:00:50,445 terminatoren. 19 00:00:50,445 --> 00:00:53,610 Det efterlader os med kun et behov for seks bytes. 20 00:00:53,610 --> 00:00:56,740 >> Men desværre kun vi, tildelt 16 i alt. 21 00:00:56,740 --> 00:01:01,305 Så hvis brugeren rent faktisk typer i 16 tegn eller 17 eller flere hundrede 22 00:01:01,305 --> 00:01:04,410 tegn, er vi stadig ikke kommer til at har nok plads i hukommelsen til 23 00:01:04,410 --> 00:01:05,400 brugerens input. 24 00:01:05,400 --> 00:01:07,750 Og i virkeligheden er det, hvad der gør få input fra brugeren, så 25 00:01:07,750 --> 00:01:08,940 vanskeligt i almindelighed. 26 00:01:08,940 --> 00:01:12,270 Og ja, det er derfor vi implementeret get string-funktionen i den første 27 00:01:12,270 --> 00:01:13,900 sted i CS50 bibliotek - 28 00:01:13,900 --> 00:01:16,900 at finde ud af, hvordan man håndterer dem, situationer, hvor brugeren skriver i 29 00:01:16,900 --> 00:01:19,710 flere tegn, end vi oprindeligt forventet. 30 00:01:19,710 --> 00:01:21,750 >> Helt ærligt, uden helt omskrive programmet, 31 00:01:21,750 --> 00:01:23,290 der er ingen ren løsning. 32 00:01:23,290 --> 00:01:26,970 Snarere, hvad vi ville have at gøre er at få en karakter fra brugeren én ad 33 00:01:26,970 --> 00:01:28,860 tid, igen og igen. 34 00:01:28,860 --> 00:01:32,510 Og på hvert punkt, hvis vi indser, at vi er tør for hukommelse, ville vi nødt til på 35 00:01:32,510 --> 00:01:36,450 dette punkt gå tilbage og omfordele nogle mere hukommelse ved at kopiere brugerens 36 00:01:36,450 --> 00:01:39,400 tidligere input fra vores første bid hukommelse i den nye, 37 00:01:39,400 --> 00:01:40,810 større luns af hukommelse. 38 00:01:40,810 --> 00:01:44,610 Og derefter gentage denne proces igen og igen, indtil brugeren er færdig give 39 00:01:44,610 --> 00:01:45,860 hans eller hendes input. 40 00:01:45,860 --> 00:01:48,246