1 00:00:00,000 --> 00:00:02,490 [Powered by Google Translate] [CS50 Librerija] 2 00:00:02,490 --> 00:00:04,220 [Nate Hardison] [Università ta 'Harvard] 3 00:00:04,220 --> 00:00:07,260 [Dan huwa CS50. CS50.TV] 4 00:00:07,260 --> 00:00:11,510 Il-librerija CS50 hija għodda utli li aħna jkollu stallat fuq l-appliance 5 00:00:11,510 --> 00:00:15,870 li jagħmilha aktar faċli għalik biex jiktbu programmi li l-utenti fil-pront għall-input. 6 00:00:15,870 --> 00:00:21,670 F'dan il-video, aħna ser iġbed lura l-purtiera u tħares lejn dak li eżattament fil-librerija CS50. 7 00:00:21,670 --> 00:00:25,520 >> F'dan il-video fuq il-libreriji C, nitkellmu dwar kif inti # jinkludu fajls headers 8 00:00:25,520 --> 00:00:27,570 tal-librerija fil-kodiċi tas-sors tiegħek, 9 00:00:27,570 --> 00:00:31,150 u allura inti tqabbad mal-fajl librerija binarju matul il-fażi li jgħaqqdu 10 00:00:31,150 --> 00:00:33,140 tal-proċess kumpilazzjoni. 11 00:00:33,140 --> 00:00:36,440 Il-fajls header jispeċifikaw l-interface tal-librerija. 12 00:00:36,440 --> 00:00:41,280 Dan huwa, huma dettall kollha tar-riżorsi li l-librerija tkun disponibbli għalik għall-użu, 13 00:00:41,280 --> 00:00:45,250 bħal dikjarazzjonijiet funzjoni, kostanti, u tipi ta 'data. 14 00:00:45,250 --> 00:00:48,890 Il-fajl librerija binarju jkun fih l-implimentazzjoni tal-librerija, 15 00:00:48,890 --> 00:00:54,580 li hija miġbura mill-fajls header tal-librerija u l-l-librerija taċ. fajls kodiċi c sors. 16 00:00:54,580 --> 00:00:59,820 >> Il-fajl librerija binarju ma tantx hu interessanti li wieħed iħares lejn peress li huwa, ukoll, fil-binarju. 17 00:00:59,820 --> 00:01:03,300 Allura, ejja tagħti ħarsa lejn il-fajls header għall-librerija minflok. 18 00:01:03,300 --> 00:01:07,710 F'dan il-każ, hemm wieħed biss header fajl imsejjaħ cs50.h. 19 00:01:07,710 --> 00:01:11,040 Imxejna stallat fil-utent tinkludi direttorju 20 00:01:11,040 --> 00:01:15,150 flimkien ma 'fajls header tal-libreriji sistema oħra ". 21 00:01:15,150 --> 00:01:21,530 >> Waħda mill-ewwel affarijiet li inti ser avviż huwa li cs50.h # jinkludi fajls header minn libreriji oħra - 22 00:01:21,530 --> 00:01:25,670 float, limiti, standard bool, u LIB standard. 23 00:01:25,670 --> 00:01:28,800 Għal darb'oħra, skond il-prinċipju ta 'mhux diġà sar-rota, 24 00:01:28,800 --> 00:01:33,490 konna mibnija l-librerija CS0 permezz ta 'għodod li hemm provvediment ieħor għalina. 25 00:01:33,490 --> 00:01:38,690 >> Il-ħaġa li jmiss inti taf tara fil-librerija hija li aħna jiddefinixxu tip ġdid imsejjaħ "string". 26 00:01:38,690 --> 00:01:42,330 Din il-linja verament ftit toħloq alias għat-tip * char, 27 00:01:42,330 --> 00:01:46,000 sabiex ma magically jagħtihiex-tip sekwenza l-ġdida bl-attributi 28 00:01:46,000 --> 00:01:49,650 komuni assoċjati ma 'oġġetti string f'lingwi oħra, 29 00:01:49,650 --> 00:01:50,850 bħat-tul. 30 00:01:50,850 --> 00:01:55,180 Ir-raġuni aħna ghamilt dan huwa li jipproteġu programmaturi ġodda mill-dettalji rija 31 00:01:55,180 --> 00:01:57,580 ta 'pointers sakemm qed lest. 32 00:01:57,580 --> 00:02:00,130 >> Il-parti li jmiss tal-fajl tal-header hija d-dikjarazzjoni tal-funzjonijiet 33 00:02:00,130 --> 00:02:04,410 li l-librerija CS50 jipprovdi flimkien ma 'dokumentazzjoni. 34 00:02:04,410 --> 00:02:06,940 Avviż tal-livell ta 'dettall fil-kummenti hawn. 35 00:02:06,940 --> 00:02:10,560 Dan huwa super importanti sabiex in-nies jafu kif jużaw dawn il-funzjonijiet. 36 00:02:10,560 --> 00:02:19,150 Aħna niddikjaraw, imbagħad, funzjonijiet li fil-pront lill-utent u Chars ritorn, jirdoppja, sufruni, ints, 37 00:02:19,150 --> 00:02:24,160 twil twal, u kordi, bl-użu tip tagħna string stess. 38 00:02:24,160 --> 00:02:26,260 Wara l-prinċipju ta 'ħabi ta' informazzjoni, 39 00:02:26,260 --> 00:02:31,640 aħna poġġew definizzjoni tagħna separata fajl implimentazzjoni ċ -. cs50.c-- 40 00:02:31,640 --> 00:02:35,110 jinsabu fid-direttorju sors utent. 41 00:02:35,110 --> 00:02:38,040 Imxejna sakemm dan il-fajl sabiex inti tista 'tagħti ħarsa lejn dan, 42 00:02:38,040 --> 00:02:41,490 jitgħallmu minnha, u recompile fuq magni differenti jekk tixtieq, 43 00:02:41,490 --> 00:02:45,510 anke jekk aħna naħsbu huwa aħjar biex jaħdmu fuq l-appliance għal din il-klassi. 44 00:02:45,510 --> 00:02:47,580 Xorta waħda, ejja tagħti ħarsa lejn dan issa. 45 00:02:49,020 --> 00:02:54,620 >> Il-funzjonijiet GetChar, GetDouble, GetFloat, GetInt, u GetLongLong 46 00:02:54,620 --> 00:02:58,160 huma kollha mibnija fuq quċċata tal-funzjoni GetString. 47 00:02:58,160 --> 00:03:01,510 Jirriżulta li dawn kollha jsegwu essenzjalment l-istess mudell. 48 00:03:01,510 --> 00:03:04,870 Huma jużaw loop filwaqt li fil-pront lill-utent għall-linja waħda ta 'input. 49 00:03:04,870 --> 00:03:08,430 Huma ritorn ta 'valur speċjali jekk l-utent inputs ta' linja vojta. 50 00:03:08,430 --> 00:03:11,750 Huma jippruvaw parse input-utent bħala t-tip xierqa, 51 00:03:11,750 --> 00:03:15,010 jekk tkun char, a doppja, float, eċċ 52 00:03:15,010 --> 00:03:18,710 U allura huma jew jirritornaw r-riżultat jekk l-input kien b'suċċess parsed 53 00:03:18,710 --> 00:03:21,330 jew huma reprompt-utent. 54 00:03:21,330 --> 00:03:24,230 >> Fuq livell għoli, m'hemm xejn verament delikata hawn. 55 00:03:24,230 --> 00:03:28,760 Inti jista 'jkollok bil-miktub kodiċi bl-istess mod strutturat ruħek fil-passat. 56 00:03:28,760 --> 00:03:34,720 Forsi l-iktar parti cryptic li tħares huwa l-sejħa sscanf li parses input l-utent. 57 00:03:34,720 --> 00:03:38,160 Sscanf hija parti mill-input format ta 'konverżjoni tal-familja. 58 00:03:38,160 --> 00:03:42,300 Hija tgħix fil io.h standard, u tax-xogħol tagħha huwa li parse string C, 59 00:03:42,300 --> 00:03:46,520 skond format partikolari, il-ħażna r-riżultati parse fil-varjabbli 60 00:03:46,520 --> 00:03:48,720 pprovduta mill-sejjieħ. 61 00:03:48,720 --> 00:03:53,570 Peress li l-funzjonijiet ta 'input ta' konverżjoni format huma utli ħafna, il-funzjonijiet użati 62 00:03:53,570 --> 00:03:56,160 li mhumiex super intuwittivi fl-ewwel, 63 00:03:56,160 --> 00:03:58,300 aħna ser jmorru fuq kif sscanf xogħlijiet. 64 00:03:58,300 --> 00:04:03,330 >> L-ewwel argument li sscanf huwa * char - pointer għal karattru. 65 00:04:03,330 --> 00:04:05,150 Għall-funzjoni biex jaħdem kif suppost, 66 00:04:05,150 --> 00:04:08,340 dan il-karattru għandu jkun l-ewwel karattru ta 'sensiela C, 67 00:04:08,340 --> 00:04:12,270 terminat bil-null \ 0 karattru. 68 00:04:12,270 --> 00:04:15,120 Dan huwa l-sekwenza biex parse 69 00:04:15,120 --> 00:04:18,269 It-tieni argument li sscanf hija sekwenza format, 70 00:04:18,269 --> 00:04:20,839 tipikament mgħoddi fl bħala kostanti string, 71 00:04:20,839 --> 00:04:24,040 u inti tista raw string bħal din qabel meta jużaw printf. 72 00:04:24,040 --> 00:04:28,650 Sinjal mija fis-sekwenza format jindika specifier konverżjoni. 73 00:04:28,650 --> 00:04:30,850 Il-karattru immedjatament wara sinjal fil-mija, 74 00:04:30,850 --> 00:04:35,430 jindika t-tip Ċ li aħna rridu sscanf li jikkonvertu l. 75 00:04:35,430 --> 00:04:40,090 Fil GetInt, tara li hemm d% u ċ%. 76 00:04:40,090 --> 00:04:48,690 Dan ifisser li sscanf se tipprova li int deċimali - il-% d - u char - il-c%. 77 00:04:48,690 --> 00:04:51,510 Għal kull specifier konverżjoni fis-sekwenza format, 78 00:04:51,510 --> 00:04:56,620 sscanf jistenna argument korrispondenti aktar tard fil-lista argument tagħha. 79 00:04:56,620 --> 00:05:00,850 Dan l-argument għandu jindika f'post xieraq ittajpjat 80 00:05:00,850 --> 00:05:04,000 fejn jinħażnu l-riżultat tal-konverżjoni. 81 00:05:04,000 --> 00:05:08,910 >> Il-mod tipiku ta 'kif isir dan huwa li jinħoloq varjabbli fuq il-munzell qabel is-sejħa sscanf 82 00:05:08,910 --> 00:05:11,440 għal kull oġġett li inti tixtieq li parse mill-sekwenza 83 00:05:11,440 --> 00:05:15,520 u mbagħad jużaw l-operatur indirizz - l-ampersand - li tgħaddi pointers 84 00:05:15,520 --> 00:05:19,100 li dawk il-varjabbli għas-sejħa sscanf. 85 00:05:19,100 --> 00:05:22,720 Tista 'tara li fil-GetInt nagħmlu eżattament dan. 86 00:05:22,720 --> 00:05:28,240 Dritt qabel is-sejħa sscanf, aħna jiddikjaraw int imsejħa n u ċ sejħa char fuq il-munzell, 87 00:05:28,240 --> 00:05:32,340 u aħna jgħaddu pointers għalihom fis-sejħa sscanf. 88 00:05:32,340 --> 00:05:35,800 Tqegħid dawn il-varjabbli dwar il-munzell huwa preferut fuq użu ispazju allokat 89 00:05:35,800 --> 00:05:39,350 fuq il-munzell bil malloc, peress li inti tevita l-overhead tas-sejħa malloc, 90 00:05:39,350 --> 00:05:43,060 u inti ma għandekx għalfejn tinkwieta dwar jnixxu memorja. 91 00:05:43,060 --> 00:05:47,280 Karattri mhux prefissi b'sinjal fil-mija ma pront konverżjoni. 92 00:05:47,280 --> 00:05:50,380 Pjuttost huma biss iżidu l-ispeċifikazzjoni format. 93 00:05:50,380 --> 00:05:56,500 >> Per eżempju, jekk l-sekwenza format GetInt kienu d% minflok, 94 00:05:56,500 --> 00:05:59,800 sscanf se tfittex l-ittra ta 'segwita minn int, 95 00:05:59,800 --> 00:06:04,360 u filwaqt li kien ser jipprova li jikkonvertu l-int, ma tagħmel xi ħaġa oħra mal-a. 96 00:06:04,360 --> 00:06:07,440 L-unika eċċezzjoni għal dan hija whitespace. 97 00:06:07,440 --> 00:06:11,030 Karattri White ispazju fil-sekwenza format jlaħħaq kull ammont ta 'whitespace - 98 00:06:11,030 --> 00:06:12,890 anke xejn affattu. 99 00:06:12,890 --> 00:06:18,100 Allura, hu għalhekk li l-kumment isemmi possibilment iwassal u / jew tkaxkir whitespace. 100 00:06:18,100 --> 00:06:22,910 Allura, f'dan il-punt jidher qisu sejħa sscanf tagħna se tipprova li parse string input tal-utent 101 00:06:22,910 --> 00:06:25,380 billi tiċċekkja għall whitespace ewlieni possibbli, 102 00:06:25,380 --> 00:06:29,300 segwit minn int li se jiġu konvertiti u maħżuna fil-varjabbli n int 103 00:06:29,300 --> 00:06:33,090 segwit minn xi ammont ta 'whitespace, u segwit minn karattru 104 00:06:33,090 --> 00:06:35,810 maħżuna fil-c varjabbli char. 105 00:06:35,810 --> 00:06:37,790 >> Xi ngħidu dwar il-valur tar-ritorn? 106 00:06:37,790 --> 00:06:41,560 Sscanf se parse-linja input mill-bidu sat-tmiem, 107 00:06:41,560 --> 00:06:44,860 waqfien meta jilħaq it-tmiem jew meta karattru fil-input 108 00:06:44,860 --> 00:06:49,320 ma taqbilx ma 'karattru format jew meta ma jkunx jista' jagħmel konverżjoni. 109 00:06:49,320 --> 00:06:52,690 Valur tar-ritorn huwa jintuża biex jiġi individwat meta hija waqfet. 110 00:06:52,690 --> 00:06:55,670 Jekk hija waqfet, minħabba li laħqu t-tmiem tas-sekwenza input 111 00:06:55,670 --> 00:07:00,630 qabel ma tagħmel xi konverżjonijiet u qabel ma jaqblu parti mill-sekwenza format, 112 00:07:00,630 --> 00:07:04,840 allura l-EOF kostanti speċjali huwa rritornat. 113 00:07:04,840 --> 00:07:08,200 Inkella, dan jirritorna l-għadd ta 'konverżjonijiet ta' suċċess, 114 00:07:08,200 --> 00:07:14,380 li jista 'jkun 0, 1, jew 2, peress li konna mitluba għal żewġ konverżjonijiet. 115 00:07:14,380 --> 00:07:19,000 Fil-każ tagħna, irridu li jagħmlu ċert li l-utent ittajpjat fi int u biss int. 116 00:07:19,000 --> 00:07:23,370 >> Għalhekk, irridu sscanf li jirritornaw 1. Ara għaliex? 117 00:07:23,370 --> 00:07:26,850 Jekk sscanf lura 0, allura l-ebda konverżjonijiet saru, 118 00:07:26,850 --> 00:07:31,690 sabiex l-utent ittajpjat xi ħaġa oħra għajr int fil-bidu ta 'l-input. 119 00:07:31,690 --> 00:07:37,100 Jekk sscanf prospetti 2, allura l-utent ma suppost tip fil fil-bidu ta 'l-input, 120 00:07:37,100 --> 00:07:41,390 iżda mbagħad ittajpjat f'xi natura mhux whitespace wara 121 00:07:41,390 --> 00:07:44,940 peress li l-% c konverżjoni irnexxielu. 122 00:07:44,940 --> 00:07:49,570 Ara naqra, li pjuttost spjegazzjoni twila għal sejħa funzjoni waħda. 123 00:07:49,570 --> 00:07:53,460 Xorta waħda, jekk inti tixtieq aktar informazzjoni dwar sscanf u aħwa tiegħu, 124 00:07:53,460 --> 00:07:57,130 jiċċekkjaw il-paġni bniedem, Google, jew it-tnejn. 125 00:07:57,130 --> 00:07:58,780 Hemm ħafna ta 'għażliet spag format, 126 00:07:58,780 --> 00:08:03,830 u dawn jistgħu jiffrankaw inti ħafna ta 'xogħol manwali meta jippruvaw biex parse kordi fl C. 127 00:08:03,830 --> 00:08:07,180 >> Il-funzjoni finali fil-librerija li tħares lejn huwa GetString. 128 00:08:07,180 --> 00:08:10,310 Jirriżulta li GetString huwa funzjoni delikata biex jiktbu sew, 129 00:08:10,310 --> 00:08:14,290 anke jekk jidher li huwa simili tali sempliċi, kompitu komuni. 130 00:08:14,290 --> 00:08:16,170 Għaliex dan huwa l-każ? 131 00:08:16,170 --> 00:08:21,380 Ukoll, ejja jaħsbu dwar kif aħna qed tmur biex jaħżnu l-linja li l-utent tipi pulzieri 132 00:08:21,380 --> 00:08:23,880 Peress string hija sekwenza ta 'Chars, 133 00:08:23,880 --> 00:08:26,430 aħna tista 'tixtieq li jaħżen fil-firxa fuq il-munzell, 134 00:08:26,430 --> 00:08:31,250 imma aħna jeħtieġ li tkun taf kemm żmien il-firxa se tkun meta aħna tiddikjara dan. 135 00:08:31,250 --> 00:08:34,030 Bl-istess mod, jekk irridu li tqiegħed lilha fuq il-munzell, 136 00:08:34,030 --> 00:08:38,090 għandna bżonn li tgħaddi lill malloc-numru ta 'bytes irridu riserva, 137 00:08:38,090 --> 00:08:39,730 iżda dan huwa impossibbli. 138 00:08:39,730 --> 00:08:42,760 Għandna l-ebda idea kif ħafna Chars l-utent se tip 139 00:08:42,760 --> 00:08:46,590 qabel l-utent fil-fatt ma tip tagħhom. 140 00:08:46,590 --> 00:08:50,720 >> Soluzzjoni naive għal din il-problema huwa biss jirriżervaw blokki kbar ta 'spazju, ngħidu aħna, 141 00:08:50,720 --> 00:08:54,540 blokk ta '1000 Chars għall-input tal-utent, 142 00:08:54,540 --> 00:08:57,980 jekk wieħed jassumi li l-utent qatt ma tip fil string dik twila. 143 00:08:57,980 --> 00:09:00,810 Din hija idea ħażina għal żewġ raġunijiet. 144 00:09:00,810 --> 00:09:05,280 L-ewwel, jekk wieħed jassumi li l-utenti tipikament ma tip fil kordi dak twil, 145 00:09:05,280 --> 00:09:07,610 inti tista 'skart ħafna ta' memorja. 146 00:09:07,610 --> 00:09:10,530 Fuq il-magni moderni, dan ma jista 'jkun kwistjoni jekk inti tagħmel dan 147 00:09:10,530 --> 00:09:13,890 f'waħda jew żewġ każijiet iżolati, 148 00:09:13,890 --> 00:09:17,630 imma jekk inti qed tieħu l-input utent fil-linja u l-ħażna għall-użu aktar tard, 149 00:09:17,630 --> 00:09:20,870 inti tista 'malajr terda up ton ta' memorja. 150 00:09:20,870 --> 00:09:24,450 Barra minn hekk, jekk il-programm int bil-miktub hija għal kompjuter iżgħar - 151 00:09:24,450 --> 00:09:28,100 mezz bħal smartphone jew xi ħaġa oħra bil-memorja limitata - 152 00:09:28,100 --> 00:09:32,060 din is-soluzzjoni tikkawża problemi ħafna aktar malajr. 153 00:09:32,060 --> 00:09:36,450 It-tieni, ir-raġuni aktar serji li ma tagħmel dan huwa li tħalli programm tiegħek vulnerabbli 154 00:09:36,450 --> 00:09:39,710 għal dak li sejjaħ attakk overflow buffer. 155 00:09:39,710 --> 00:09:45,840 Fil-programmazzjoni, ta 'buffer hija memorja użati biex jaħżnu temporanjament data input jew output, 156 00:09:45,840 --> 00:09:48,980 li f'dan il-każ huwa 1000-char blokk tagħna. 157 00:09:48,980 --> 00:09:53,370 A overflow buffer iseħħ meta data hija miktuba passat il-tarf tal-blokka. 158 00:09:53,370 --> 00:09:57,790 >> Per eżempju, jekk utent attwalment ma tip f'aktar minn 1000 Chars. 159 00:09:57,790 --> 00:10:01,570 Inti jista 'jkollok esperjenza dan aċċidentalment meta jipprogrammaw l-matriċi. 160 00:10:01,570 --> 00:10:05,620 Jekk għandek firxa ta '10 ints, xejn inti tieqaf milli tipprova taqra jew tikteb 161 00:10:05,620 --> 00:10:07,810 l-15 int. 162 00:10:07,810 --> 00:10:10,000 M'hemm l-ebda twissijiet kompilatur jew żbalji. 163 00:10:10,000 --> 00:10:13,250 Il-programm biss blunders dritt 'il quddiem u aċċessi l-memorja 164 00:10:13,250 --> 00:10:18,150 fejn jidhirlu l-int 15 se jkun, u dan jista 'jissostitwixxu varjabbli oħra tiegħek. 165 00:10:18,150 --> 00:10:22,040 Fl-agħar każ, inti tista jissostitwixxu xi interna program tiegħek 166 00:10:22,040 --> 00:10:26,820 mekkaniżmi ta 'kontroll, li jikkawżaw program tiegħek biex fil-fatt iwettaq l-istruzzjonijiet differenti 167 00:10:26,820 --> 00:10:28,340 milli suppost maħsuba. 168 00:10:28,340 --> 00:10:31,360 >> Issa, mhuwiex komuni biex tagħmel dan aċċidentalment, 169 00:10:31,360 --> 00:10:35,150 iżda din hija teknika pjuttost komuni li guys ħżiena jużaw biex jinkiser programmi 170 00:10:35,150 --> 00:10:39,080 u mqiegħda kodiċi malizzjużi fuq kompjuters nies oħrajn. 171 00:10:39,080 --> 00:10:42,910 Għalhekk, ma nistgħux biss tuża soluzzjoni naive tagħna. 172 00:10:42,910 --> 00:10:45,590 Għandna bżonn mod biex jipprevjenu programmi tagħna milli jkunu vulnerabbli 173 00:10:45,590 --> 00:10:47,880 għal attakk overflow buffer. 174 00:10:47,880 --> 00:10:51,430 Biex tagħmel dan, għandna bżonn li jiġi żgurat li buffer tagħna jkunu jistgħu jikbru hekk kif naqraw 175 00:10:51,430 --> 00:10:53,850 aktar rispons mill-utent. 176 00:10:53,850 --> 00:10:57,440 Is-soluzzjoni? Aħna nużaw buffer allokazzjoni borġ. 177 00:10:57,440 --> 00:10:59,950 Minħabba li aħna jistgħu resize billi tuża l resize l-funzjoni realloc, 178 00:10:59,950 --> 00:11:04,580 u aħna jżommu rekord ta 'żewġ numri - l-indiċi ta' l-islott vojta jmiss fil-buffer 179 00:11:04,580 --> 00:11:08,390 u t-tul jew il-kapaċità tal-buffer. 180 00:11:08,390 --> 00:11:13,210 Naqraw fil Chars mill-utent wieħed fi żmien tuża l-funzjoni fgetc. 181 00:11:13,210 --> 00:11:19,360 L-argument tal-funzjoni fgetc jieħu - stdin - hija referenza għall-sekwenza input standard, 182 00:11:19,360 --> 00:11:23,810 li huwa kanal input preconnected li jintuża biex jittrasferixxi input tal-utent 183 00:11:23,810 --> 00:11:26,270 mit-terminal għall-programm. 184 00:11:26,270 --> 00:11:29,890 >> Kull meta l-utent tipi fil-karattru ġdid, aħna tikkontrolla biex tara jekk l-indiċi 185 00:11:29,890 --> 00:11:35,810 ta 'l-islott ħielsa jmiss plus 1 hi akbar mill-kapaċità tal-buffer. 186 00:11:35,810 --> 00:11:39,690 Il-1 taqa 'fil għaliex jekk l-indiċi ħielsa jmiss huwa 5, 187 00:11:39,690 --> 00:11:44,150 imbagħad tul buffer tagħna għandhom jkunu bejn 6 grazzi għall 0 indiċjar. 188 00:11:44,150 --> 00:11:48,350 Jekk konna jispiċċaw l-ispazju fil-buffer, allura aħna tentattiv biex resize dan, 189 00:11:48,350 --> 00:11:51,690 irduppjar hekk li aħna tnaqqas il-numru ta 'drabi li aħna resize 190 00:11:51,690 --> 00:11:54,760 jekk l-utent huwa ittajpjar fl string verament twila. 191 00:11:54,760 --> 00:11:57,950 Jekk il-sekwenza gotten wisq twil jew jekk aħna jispiċċaw tal-memorja borġ, 192 00:11:57,950 --> 00:12:01,350 aħna ħielsa buffer tagħna u null ritorn. 193 00:12:01,350 --> 00:12:04,170 >> Fl-aħħarnett, aħna tehmeż l-karatteristiċi tal-buffer. 194 00:12:04,170 --> 00:12:08,200 Ladarba l-hits utent jidħol jew jirritornaw, sinjalar linja ġdida, 195 00:12:08,200 --> 00:12:12,050 jew l speċjali karatteristiċi - kontroll d - li juri fit-tmiem ta 'input, 196 00:12:12,050 --> 00:12:16,240 nagħmlu verifika biex tara jekk l-utent fil-fatt ittajpjat fil xejn affattu. 197 00:12:16,240 --> 00:12:18,820 Jekk le, nerġgħu lura null. 198 00:12:18,820 --> 00:12:22,280 Inkella, għaliex buffer tagħna huwa probabbilment akbar minn għandna bżonn, 199 00:12:22,280 --> 00:12:24,830 fl-agħar każ huwa kważi darbtejn akbar mill neħtieġu 200 00:12:24,830 --> 00:12:27,830 peress li aħna doppju kull darba we resize, 201 00:12:27,830 --> 00:12:31,840 nagħmlu kopja ġdida tas-sekwenza jużaw biss l-ammont ta 'spazju li għandna bżonn. 202 00:12:31,840 --> 00:12:34,220 Aħna żid 1 żejjed għas-sejħa malloc, 203 00:12:34,220 --> 00:12:37,810 b'tali mod li hemm spazju għall-karattru terminatur speċjali null - il-\ 0, 204 00:12:37,810 --> 00:12:41,990 li aħna ehmeż mad-sekwenza ladarba aħna kopja fil-bqija tal-karattri, 205 00:12:41,990 --> 00:12:45,060 użu strncpy minflok strcpy 206 00:12:45,060 --> 00:12:48,830 sabiex inkunu nistgħu jispeċifikaw eżattament kemm Chars irridu li kopja. 207 00:12:48,830 --> 00:12:51,690 Strcpy kopji sakemm hits a \ 0. 208 00:12:51,690 --> 00:12:55,740 Imbagħad aħna ħielsa buffer tagħna u jirritorna l-kopja lill-sejjieħ. 209 00:12:55,740 --> 00:12:59,840 >> Min jaf din il-funzjoni sempliċi seeming jistgħu jiġu hekk kkumplikata? 210 00:12:59,840 --> 00:13:02,820 Issa taf dak li tmur fil-librerija CS50. 211 00:13:02,820 --> 00:13:06,470 >> Jisimni Nate Hardison, u dan huwa CS50. 212 00:13:06,470 --> 00:13:08,350 [CS50.TV]