1 00:00:00,000 --> 00:00:00,340 2 00:00:00,340 --> 00:00:01,960 >> SPEAKER 1: Pojďme nyní opravit že poslední program. 3 00:00:01,960 --> 00:00:04,920 A tentokrát, pojďme explicitně přidělit paměť, v níž 4 00:00:04,920 --> 00:00:06,550 vstup uživatele budou uložena. 5 00:00:06,550 --> 00:00:09,600 Chcete-li tak učinit, pojďme zaměřit se na to jako první řádek kódu, kde jsme deklarované s 6 00:00:09,600 --> 00:00:11,590 dříve se char hvězda. 7 00:00:11,590 --> 00:00:14,210 Tentokrát, pojďme re-declare to takto - 8 00:00:14,210 --> 00:00:19,380 char s držák 16, například, pravá závorka. 9 00:00:19,380 --> 00:00:23,690 >> Jinými slovy, pojďme prohlásit s až ne již nebude adresa charakteru, 10 00:00:23,690 --> 00:00:26,610 ale spíše pole 16 znaků. 11 00:00:26,610 --> 00:00:30,295 Tímto způsobem může uživatel zadat až 15 znaky a stále ponechávají prostor pro 12 00:00:30,295 --> 00:00:31,570 null terminátor. 13 00:00:31,570 --> 00:00:35,870 Pojďme pokračovat ušetřit, kompilace, a Spustit tento program. 14 00:00:35,870 --> 00:00:40,770 Ujistěte se scanf2 tečka lomítko scanf2. 15 00:00:40,770 --> 00:00:45,100 Pojďme se nyní zadejte řetězec jako ahoj, a my poděkoval za pozdrav. 16 00:00:45,100 --> 00:00:46,440 >> Nyní je tu ještě problém. 17 00:00:46,440 --> 00:00:50,140 Jen jsem napsal v ahoj, která je pouze pět znaků, plus 1 na hodnotu null 18 00:00:50,140 --> 00:00:50,445 terminátor. 19 00:00:50,445 --> 00:00:53,610 Je nám zbývá jen potřeba šest bajtů. 20 00:00:53,610 --> 00:00:56,740 >> Ale bohužel, jen jsme přiděleno 16 celkem. 21 00:00:56,740 --> 00:01:01,305 Takže v případě, že uživatel skutečně druhy v 16. znaky, nebo 17, nebo několik set 22 00:01:01,305 --> 00:01:04,410 znaky, my ještě nebude mají dostatek prostoru v paměti 23 00:01:04,410 --> 00:01:05,400 vstup uživatele. 24 00:01:05,400 --> 00:01:07,750 A ve skutečnosti, to je to, co dělá získání vstupu uživatele, aby 25 00:01:07,750 --> 00:01:08,940 obtížné obecně. 26 00:01:08,940 --> 00:01:12,270 A skutečně, to je důvod, proč jsme zavedli řetězec funkce get v první 27 00:01:12,270 --> 00:01:13,900 místo v knihovně CS50 - 28 00:01:13,900 --> 00:01:16,900 přijít na to, jak zacházet s těmi situace, kdy uživatel zadá 29 00:01:16,900 --> 00:01:19,710 více znaků, než jsme se původně předpokládalo. 30 00:01:19,710 --> 00:01:21,750 >> Upřímně řečeno, aniž by zcela přepisování tohoto programu, 31 00:01:21,750 --> 00:01:23,290 není čisté řešení. 32 00:01:23,290 --> 00:01:26,970 Spíše to, co bychom měli udělat, je dostat postava z uživatelského jednoho na 33 00:01:26,970 --> 00:01:28,860 čas, znovu a znovu. 34 00:01:28,860 --> 00:01:32,510 A v každém okamžiku, pokud si uvědomíme, že jsme z paměti, museli bychom na 35 00:01:32,510 --> 00:01:36,450 že bod jít zpět a přerozdělit některé více paměti, zkopírujte uživatele 36 00:01:36,450 --> 00:01:39,400 předchozí vstup z našeho prvního bloku paměti do nové, 37 00:01:39,400 --> 00:01:40,810 větší kus paměti. 38 00:01:40,810 --> 00:01:44,610 A pak tento proces opakovat znovu a , dokud uživatel provádí poskytuje 39 00:01:44,610 --> 00:01:45,860 jeho nebo její vstup. 40 00:01:45,860 --> 00:01:48,246