>> SPEAKER 1: Pojďme nyní opravit že poslední program.
A tentokrát, pojďme explicitně přidělit paměť, v níž
vstup uživatele budou uložena.
Chcete-li tak učinit, pojďme zaměřit se na to jako první řádek kódu, kde jsme deklarované s
dříve se char hvězda.
Tentokrát, pojďme re-declare to takto -
char s držák 16, například, pravá závorka.
>> Jinými slovy, pojďme prohlásit s až ne již nebude adresa charakteru,
ale spíše pole 16 znaků.
Tímto způsobem může uživatel zadat až 15 znaky a stále ponechávají prostor pro
null terminátor.
Pojďme pokračovat ušetřit, kompilace, a Spustit tento program.
Ujistěte se scanf2 tečka lomítko scanf2.
Pojďme se nyní zadejte řetězec jako ahoj, a my poděkoval za pozdrav.
>> Nyní je tu ještě problém.
Jen jsem napsal v ahoj, která je pouze pět znaků, plus 1 na hodnotu null
terminátor.
Je nám zbývá jen potřeba šest bajtů.
>> Ale bohužel, jen jsme přiděleno 16 celkem.
Takže v případě, že uživatel skutečně druhy v 16. znaky, nebo 17, nebo několik set
znaky, my ještě nebude mají dostatek prostoru v paměti
vstup uživatele.
A ve skutečnosti, to je to, co dělá získání vstupu uživatele, aby
obtížné obecně.
A skutečně, to je důvod, proč jsme zavedli řetězec funkce get v první
místo v knihovně CS50 -
přijít na to, jak zacházet s těmi situace, kdy uživatel zadá
více znaků, než jsme se původně předpokládalo.
>> Upřímně řečeno, aniž by zcela přepisování tohoto programu,
není čisté řešení.
Spíše to, co bychom měli udělat, je dostat postava z uživatelského jednoho na
čas, znovu a znovu.
A v každém okamžiku, pokud si uvědomíme, že jsme z paměti, museli bychom na
že bod jít zpět a přerozdělit některé více paměti, zkopírujte uživatele
předchozí vstup z našeho prvního bloku paměti do nové,
větší kus paměti.
A pak tento proces opakovat znovu a , dokud uživatel provádí poskytuje
jeho nebo její vstup.