1 00:00:00,000 --> 00:00:00,340 2 00:00:00,340 --> 00:00:01,960 >> Tagapagsalita 1: ni ngayon ayusin Hayaan na huling programa. 3 00:00:01,960 --> 00:00:04,920 At oras na ito, sabihin tahasan maglaan ilang memorya kung saan ang 4 00:00:04,920 --> 00:00:06,550 input user na ito ay naka-imbak. 5 00:00:06,550 --> 00:00:09,600 Upang gawin ito, ni ihasa in sa na unang hayaan linya ng code kung saan kami ipinahayag ni 6 00:00:09,600 --> 00:00:11,590 dati upang maging isang pansamantalang trabaho bituin. 7 00:00:11,590 --> 00:00:14,210 Oras na ito, sabihin sa muling idedeklara ito tulad ng sumusunod - 8 00:00:14,210 --> 00:00:19,380 pansamantalang trabaho bracket 16 s, halimbawa, malapit bracket. 9 00:00:19,380 --> 00:00:23,690 >> Sa madaling salita, ipinahahayag ni s hanggang sa walang hayaan na maging isang address ng isang karakter, 10 00:00:23,690 --> 00:00:26,610 kundi isang array ng 16 mga character. 11 00:00:26,610 --> 00:00:30,295 Sa ganitong paraan, maaari i-type ang gumagamit sa hanggang sa 15 character at mag-iwan pa rin kuwarto para sa 12 00:00:30,295 --> 00:00:31,570 isang null Terminator. 13 00:00:31,570 --> 00:00:35,870 Ni magpatuloy Hayaan upang I-save, sumulat ng libro, at Patakbuhin ang program na ito. 14 00:00:35,870 --> 00:00:40,770 Gawing scanf2 tuldok slash scanf2. 15 00:00:40,770 --> 00:00:45,100 Ngayon nagta-type ng isang string tulad kumusta Hayaan, at kami ay thanked para sa halo. 16 00:00:45,100 --> 00:00:46,440 >> Ngayon, may problema pa rin. 17 00:00:46,440 --> 00:00:50,140 Ako lamang ang nai-type sa kumusta, na kung saan ay lamang limang mga character, plus 1 para sa null 18 00:00:50,140 --> 00:00:50,445 Terminator. 19 00:00:50,445 --> 00:00:53,610 Umalis kami na may lamang ng pangangailangan para sa anim bytes. 20 00:00:53,610 --> 00:00:56,740 >> Ngunit sa kasamaang-palad, hindi namin lamang inilalaan 16 sa kabuuan. 21 00:00:56,740 --> 00:01:01,305 Kaya kung talagang uri ng user sa 16 character, o 17, o ilang daang 22 00:01:01,305 --> 00:01:04,410 character, kami ay hindi pa rin ng pagpunta sa may sapat na puwang sa memorya para sa 23 00:01:04,410 --> 00:01:05,400 input gumagamit. 24 00:01:05,400 --> 00:01:07,750 At sa katunayan, ito ay kung bakit ang pagkuha ng pag-input ng user kaya 25 00:01:07,750 --> 00:01:08,940 mahirap sa pangkalahatan. 26 00:01:08,940 --> 00:01:12,270 At sa katunayan, ito ang dahilan kung bakit kami ipinatupad ang get string function na sa unang 27 00:01:12,270 --> 00:01:13,900 lugar sa CS50 library - 28 00:01:13,900 --> 00:01:16,900 upang malaman kung paano panghawakan ang mga mga sitwasyon kung saan ang mga uri ng user sa 29 00:01:16,900 --> 00:01:19,710 higit pang mga character kaysa namin sa una inaasahang. 30 00:01:19,710 --> 00:01:21,750 >> Nang tapat, nang hindi tuluyang muling pagsusulat ng mga programang ito, 31 00:01:21,750 --> 00:01:23,290 walang malinis na solusyon. 32 00:01:23,290 --> 00:01:26,970 Sa halip, kung ano ang gusto naming gawin ay makakuha ng isang character mula sa user isa-isang 33 00:01:26,970 --> 00:01:28,860 oras, muli at muli. 34 00:01:28,860 --> 00:01:32,510 At sa bawat punto kung nauunawaan natin Ikinalulungkot namin out ng memory, gusto naming i-sa 35 00:01:32,510 --> 00:01:36,450 puntong iyon pabalik pumunta sa at reallocate ilang higit pang memory, kopyahin ng gumagamit 36 00:01:36,450 --> 00:01:39,400 nakaraang input mula sa aming mga unang tipak ng memorya sa bagong, 37 00:01:39,400 --> 00:01:40,810 mas malaking tipak ng memory. 38 00:01:40,810 --> 00:01:44,610 At pagkatapos ay ulitin ang proseso na muli at muli hanggang sa ang user ay tapos na pagbibigay 39 00:01:44,610 --> 00:01:45,860 ang kanyang input. 40 00:01:45,860 --> 00:01:48,246