>> Tagapagsalita 1: ni ngayon ayusin Hayaan na huling programa.
At oras na ito, sabihin tahasan maglaan ilang memorya kung saan ang
input user na ito ay naka-imbak.
Upang gawin ito, ni ihasa in sa na unang hayaan linya ng code kung saan kami ipinahayag ni
dati upang maging isang pansamantalang trabaho bituin.
Oras na ito, sabihin sa muling idedeklara ito tulad ng sumusunod -
pansamantalang trabaho bracket 16 s, halimbawa, malapit bracket.
>> Sa madaling salita, ipinahahayag ni s hanggang sa walang hayaan na maging isang address ng isang karakter,
kundi isang array ng 16 mga character.
Sa ganitong paraan, maaari i-type ang gumagamit sa hanggang sa 15 character at mag-iwan pa rin kuwarto para sa
isang null Terminator.
Ni magpatuloy Hayaan upang I-save, sumulat ng libro, at Patakbuhin ang program na ito.
Gawing scanf2 tuldok slash scanf2.
Ngayon nagta-type ng isang string tulad kumusta Hayaan, at kami ay thanked para sa halo.
>> Ngayon, may problema pa rin.
Ako lamang ang nai-type sa kumusta, na kung saan ay lamang limang mga character, plus 1 para sa null
Terminator.
Umalis kami na may lamang ng pangangailangan para sa anim bytes.
>> Ngunit sa kasamaang-palad, hindi namin lamang inilalaan 16 sa kabuuan.
Kaya kung talagang uri ng user sa 16 character, o 17, o ilang daang
character, kami ay hindi pa rin ng pagpunta sa may sapat na puwang sa memorya para sa
input gumagamit.
At sa katunayan, ito ay kung bakit ang pagkuha ng pag-input ng user kaya
mahirap sa pangkalahatan.
At sa katunayan, ito ang dahilan kung bakit kami ipinatupad ang get string function na sa unang
lugar sa CS50 library -
upang malaman kung paano panghawakan ang mga mga sitwasyon kung saan ang mga uri ng user sa
higit pang mga character kaysa namin sa una inaasahang.
>> Nang tapat, nang hindi tuluyang muling pagsusulat ng mga programang ito,
walang malinis na solusyon.
Sa halip, kung ano ang gusto naming gawin ay makakuha ng isang character mula sa user isa-isang
oras, muli at muli.
At sa bawat punto kung nauunawaan natin Ikinalulungkot namin out ng memory, gusto naming i-sa
puntong iyon pabalik pumunta sa at reallocate ilang higit pang memory, kopyahin ng gumagamit
nakaraang input mula sa aming mga unang tipak ng memorya sa bagong,
mas malaking tipak ng memory.
At pagkatapos ay ulitin ang proseso na muli at muli hanggang sa ang user ay tapos na pagbibigay
ang kanyang input.