1 00:00:00,000 --> 00:00:00,340 2 00:00:00,340 --> 00:00:01,960 >> HÖGTALARE 1: Låt oss nu fixa det sista programmet. 3 00:00:01,960 --> 00:00:04,920 Och den här gången, låt oss uttryckligen tilldela en del av minnet i vilket 4 00:00:04,920 --> 00:00:06,550 användarens input kommer att lagras. 5 00:00:06,550 --> 00:00:09,600 För att göra detta, låt oss slipa på det första kodrad där vi förklarade s 6 00:00:09,600 --> 00:00:11,590 tidigare att vara en röding stjärna. 7 00:00:11,590 --> 00:00:14,210 Den här gången ska vi åter deklarera det så här - 8 00:00:14,210 --> 00:00:19,380 char s konsol 16, till exempel, nära fästet. 9 00:00:19,380 --> 00:00:23,690 >> Med andra ord, låt oss förklara ar att ingen längre att vara en adress till ett tecken, 10 00:00:23,690 --> 00:00:26,610 utan snarare en matris med 16 tecken. 11 00:00:26,610 --> 00:00:30,295 På detta sätt kan användaren skriva in upp till 15 tecken och ändå lämna utrymme för 12 00:00:30,295 --> 00:00:31,570 avslutande NULL. 13 00:00:31,570 --> 00:00:35,870 Låt oss fortsätta att spara, Kompilera, och Kör det här programmet. 14 00:00:35,870 --> 00:00:40,770 Gör scanf2 dot snedstreck scanf2. 15 00:00:40,770 --> 00:00:45,100 Låt oss nu skriva en sträng som hej, och vi tackade för hello. 16 00:00:45,100 --> 00:00:46,440 >> Nu, det är fortfarande ett problem. 17 00:00:46,440 --> 00:00:50,140 Jag bara skrev i hej, som bara fem tecken, plus 1 för null 18 00:00:50,140 --> 00:00:50,445 terminator. 19 00:00:50,445 --> 00:00:53,610 Det lämnar oss med endast ett behov av sex bitgrupper. 20 00:00:53,610 --> 00:00:56,740 >> Men tyvärr, bara vi allokeras 16 totalt. 21 00:00:56,740 --> 00:01:01,305 Så om användaren faktiskt typer i 16 tecken, eller 17, eller flera hundra 22 00:01:01,305 --> 00:01:04,410 tecken, vi ändå inte att har tillräckligt med utrymme i minnet för den 23 00:01:04,410 --> 00:01:05,400 användarens input. 24 00:01:05,400 --> 00:01:07,750 Och i själva verket är detta det som gör få indata från användaren så 25 00:01:07,750 --> 00:01:08,940 svårt i allmänhet. 26 00:01:08,940 --> 00:01:12,270 Och faktiskt, det är därför vi genomfört GET sträng funktionen i första 27 00:01:12,270 --> 00:01:13,900 plats i CS50 bibliotek - 28 00:01:13,900 --> 00:01:16,900 att räkna ut hur man ska hantera dem situationer där användaren skriver i 29 00:01:16,900 --> 00:01:19,710 fler tecken än vi först beräknat. 30 00:01:19,710 --> 00:01:21,750 >> Ärligt talat, utan att helt skriva om det här programmet, 31 00:01:21,750 --> 00:01:23,290 det finns ingen ren lösning. 32 00:01:23,290 --> 00:01:26,970 Snarare, vad vi skulle behöva göra är att få ett tecken från användaren en vid en 33 00:01:26,970 --> 00:01:28,860 tiden, om och om igen. 34 00:01:28,860 --> 00:01:32,510 Och vid varje punkt, om vi inser att vi är slut på minne, skulle vi behöva på 35 00:01:32,510 --> 00:01:36,450 den punkten gå tillbaka in och omfördela lite mer minne, kopiera användarens 36 00:01:36,450 --> 00:01:39,400 tidigare insatser från vår första bit minne i den nya, 37 00:01:39,400 --> 00:01:40,810 större bit av minnet. 38 00:01:40,810 --> 00:01:44,610 Och sedan upprepa den processen igen och igen tills användaren är klar ger 39 00:01:44,610 --> 00:01:45,860 sin ingång. 40 00:01:45,860 --> 00:01:48,246