GARSIAKALBIS 1: Leiskite dabar nustatyti kad praėjusiais programa. Ir šį kartą, galime aiškiai paskirstyti kai atmintis, kurioje vartotojo įvestis bus saugomi. Norėdami tai padaryti, tegul galąstuvas, kad pirmasis linijos kodas, kai mes paskelbėme s anksčiau, kad char žvaigždė. Šį kartą, tegul iš naujo deklaruoti tai taip - char ai laikiklis 16, pavyzdžiui, skliaustai uždaromi. Kitaip tariant, galime paskelbti s iki ne nebegali būti iš charakterio adresas, o iš 16 simbolių masyvas. Tokiu būdu, vartotojas gali įvesti iki 15 ženklai ir vis dar palieka erdvės null terminatorius. Leiskite pradėti taupyti, kaupti, ir paleisti šią programą. Padaryti scanf2 taškas velniop scanf2. Leiskite dabar įrašykite eilutę kaip labas, ir mes padėkojo už labas. Dabar, dar problema. Aš tik įvedėte hello, kuri yra tik penki simboliai, plius 1 už null terminatorius. Jis palieka mums tik šešių baitų poreikis. Bet, deja, mes tik skiriama 16 iš viso. Taigi, jei vartotojas iš tikrųjų rūšys 16 ženklai, arba 17, arba keli šimtai ženklai, mes vis dar nesiruošia turite pakankamai vietos atminties vartotojo įvesties. Ir iš tiesų, tai ką daro gauti vartotojo įvesties taip sunku apskritai. Ir iš tiesų, tai kodėl mes įdiegėme GET eilutė funkcija pirmas vieta CS50 bibliotekoje - išsiaiškinti, kaip elgtis tiems, situacijų, kai vartotojas įveda į daugiau simbolių, nei mes buvo manyta iš pradžių. Tiesą sakant, be galo perrašyti šią programą, nėra švarus tirpalas. Atvirkščiai, tai, ką mes turime padaryti, tai gauti nuo vartotojo koks simbolis laikas, vėl ir vėl. Ir kiekviename taške, jei mes suprantame, kad mes iš atminties, mes turėtume ne kad taškas grįžti ir perskirstyti šiek tiek daugiau atminties, kopijuoti vartotojo ankstesnė įvesties iš mūsų pirmą riekė atminties į naujas, didesnė riekė atmintyje. Ir tada pakartokite šį procesą vėl ir tol, kol vartotojas yra padaryta teikiant jo arba jos įėjimo.