>> LUIDSPREKER 1: Laten we nu op te lossen dat laatste programma.
En deze keer, laten we expliciet toewijzen sommige geheugen waarin de
ingang gebruiker worden opgeslagen.
Om dit te doen, laten we het slijpen op die eerste regel code waar wij verklaard s
eerder aan een char ster.
Deze keer laten we re-declare het als volgt -
char s beugel 16, bijvoorbeeld haakje sluiten.
>> Met andere woorden, we verklaren is geen een adres van een karakter langer,
maar eerder een reeks van 16 tekens.
Op deze manier kan de gebruiker typt in maximaal 15 personages en nog steeds ruimte laten voor
een null-terminator.
Laten we overgaan tot sparen, Compile, en Dit programma starten.
Maak scanf2 dot slash scanf2.
Laten we nu typ een string als hello, en we bedankte voor de hello.
>> Nu, er is nog steeds een probleem.
Ik alleen getypt in hello, die alleen is vijf tekens, plus 1 voor de null
terminator.
Het laat ons achter met slechts behoefte aan zes bytes.
>> Maar helaas, alleen wij toegewezen 16 in totaal.
Als de gebruiker daadwerkelijk soorten van 16 tekens, of 17, of enkele honderden
personages, zijn we nog steeds niet van plan om genoeg ruimte in het geheugen voor de
ingang gebruiker.
En in feite, dat maakt krijgt input van de gebruiker, zodat
moeilijk in het algemeen.
En inderdaad, dit is waarom we geïmplementeerd de string functie krijgen in de eerste
plaats in de CS50 bibliotheek -
om erachter te komen hoe die omgaan met situaties waarin de gebruiker typt in
meer tekens dan wij aanvankelijk gedacht.
>> Eerlijk gezegd, zonder dat het volledig het herschrijven van dit programma,
er is geen schone oplossing.
Integendeel, wat we zouden moeten doen is een karakter van de gebruiker een voor een
tijd, opnieuw en opnieuw.
En op elk punt als we ons realiseren dat we geheugen heeft, zouden we moeten op
dat punt terug te gaan in en herverdelen wat meer geheugen, kopieert de gebruiker
vorige input van onze eerste brok geheugengebieden aan de nieuwe,
groter deel van het geheugen.
En dan weer herhalen dat proces en totdat de gebruiker wordt gedaan verstrekken
diens ingang.