1 00:00:00,000 --> 00:00:00,340 2 00:00:00,340 --> 00:00:01,960 >> LUIDSPREKER 1: Laten we nu op te lossen dat laatste programma. 3 00:00:01,960 --> 00:00:04,920 En deze keer, laten we expliciet toewijzen sommige geheugen waarin de 4 00:00:04,920 --> 00:00:06,550 ingang gebruiker worden opgeslagen. 5 00:00:06,550 --> 00:00:09,600 Om dit te doen, laten we het slijpen op die eerste regel code waar wij verklaard s 6 00:00:09,600 --> 00:00:11,590 eerder aan een char ster. 7 00:00:11,590 --> 00:00:14,210 Deze keer laten we re-declare het als volgt - 8 00:00:14,210 --> 00:00:19,380 char s beugel 16, bijvoorbeeld haakje sluiten. 9 00:00:19,380 --> 00:00:23,690 >> Met andere woorden, we verklaren is geen een adres van een karakter langer, 10 00:00:23,690 --> 00:00:26,610 maar eerder een reeks van 16 tekens. 11 00:00:26,610 --> 00:00:30,295 Op deze manier kan de gebruiker typt in maximaal 15 personages en nog steeds ruimte laten voor 12 00:00:30,295 --> 00:00:31,570 een null-terminator. 13 00:00:31,570 --> 00:00:35,870 Laten we overgaan tot sparen, Compile, en Dit programma starten. 14 00:00:35,870 --> 00:00:40,770 Maak scanf2 dot slash scanf2. 15 00:00:40,770 --> 00:00:45,100 Laten we nu typ een string als hello, en we bedankte voor de hello. 16 00:00:45,100 --> 00:00:46,440 >> Nu, er is nog steeds een probleem. 17 00:00:46,440 --> 00:00:50,140 Ik alleen getypt in hello, die alleen is vijf tekens, plus 1 voor de null 18 00:00:50,140 --> 00:00:50,445 terminator. 19 00:00:50,445 --> 00:00:53,610 Het laat ons achter met slechts behoefte aan zes bytes. 20 00:00:53,610 --> 00:00:56,740 >> Maar helaas, alleen wij toegewezen 16 in totaal. 21 00:00:56,740 --> 00:01:01,305 Als de gebruiker daadwerkelijk soorten van 16 tekens, of 17, of enkele honderden 22 00:01:01,305 --> 00:01:04,410 personages, zijn we nog steeds niet van plan om genoeg ruimte in het geheugen voor de 23 00:01:04,410 --> 00:01:05,400 ingang gebruiker. 24 00:01:05,400 --> 00:01:07,750 En in feite, dat maakt krijgt input van de gebruiker, zodat 25 00:01:07,750 --> 00:01:08,940 moeilijk in het algemeen. 26 00:01:08,940 --> 00:01:12,270 En inderdaad, dit is waarom we geïmplementeerd de string functie krijgen in de eerste 27 00:01:12,270 --> 00:01:13,900 plaats in de CS50 bibliotheek - 28 00:01:13,900 --> 00:01:16,900 om erachter te komen hoe die omgaan met situaties waarin de gebruiker typt in 29 00:01:16,900 --> 00:01:19,710 meer tekens dan wij aanvankelijk gedacht. 30 00:01:19,710 --> 00:01:21,750 >> Eerlijk gezegd, zonder dat het volledig het herschrijven van dit programma, 31 00:01:21,750 --> 00:01:23,290 er is geen schone oplossing. 32 00:01:23,290 --> 00:01:26,970 Integendeel, wat we zouden moeten doen is een karakter van de gebruiker een voor een 33 00:01:26,970 --> 00:01:28,860 tijd, opnieuw en opnieuw. 34 00:01:28,860 --> 00:01:32,510 En op elk punt als we ons realiseren dat we geheugen heeft, zouden we moeten op 35 00:01:32,510 --> 00:01:36,450 dat punt terug te gaan in en herverdelen wat meer geheugen, kopieert de gebruiker 36 00:01:36,450 --> 00:01:39,400 vorige input van onze eerste brok geheugengebieden aan de nieuwe, 37 00:01:39,400 --> 00:01:40,810 groter deel van het geheugen. 38 00:01:40,810 --> 00:01:44,610 En dan weer herhalen dat proces en totdat de gebruiker wordt gedaan verstrekken 39 00:01:44,610 --> 00:01:45,860 diens ingang. 40 00:01:45,860 --> 00:01:48,246