>> HÖGTALARE 1: Låt oss nu fixa det sista programmet.
Och den här gången, låt oss uttryckligen tilldela en del av minnet i vilket
användarens input kommer att lagras.
För att göra detta, låt oss slipa på det första kodrad där vi förklarade s
tidigare att vara en röding stjärna.
Den här gången ska vi åter deklarera det så här -
char s konsol 16, till exempel, nära fästet.
>> Med andra ord, låt oss förklara ar att ingen längre att vara en adress till ett tecken,
utan snarare en matris med 16 tecken.
På detta sätt kan användaren skriva in upp till 15 tecken och ändå lämna utrymme för
avslutande NULL.
Låt oss fortsätta att spara, Kompilera, och Kör det här programmet.
Gör scanf2 dot snedstreck scanf2.
Låt oss nu skriva en sträng som hej, och vi tackade för hello.
>> Nu, det är fortfarande ett problem.
Jag bara skrev i hej, som bara fem tecken, plus 1 för null
terminator.
Det lämnar oss med endast ett behov av sex bitgrupper.
>> Men tyvärr, bara vi allokeras 16 totalt.
Så om användaren faktiskt typer i 16 tecken, eller 17, eller flera hundra
tecken, vi ändå inte att har tillräckligt med utrymme i minnet för den
användarens input.
Och i själva verket är detta det som gör få indata från användaren så
svårt i allmänhet.
Och faktiskt, det är därför vi genomfört GET sträng funktionen i första
plats i CS50 bibliotek -
att räkna ut hur man ska hantera dem situationer där användaren skriver i
fler tecken än vi först beräknat.
>> Ärligt talat, utan att helt skriva om det här programmet,
det finns ingen ren lösning.
Snarare, vad vi skulle behöva göra är att få ett tecken från användaren en vid en
tiden, om och om igen.
Och vid varje punkt, om vi inser att vi är slut på minne, skulle vi behöva på
den punkten gå tillbaka in och omfördela lite mer minne, kopiera användarens
tidigare insatser från vår första bit minne i den nya,
större bit av minnet.
Och sedan upprepa den processen igen och igen tills användaren är klar ger
sin ingång.