1 00:00:00,000 --> 00:00:02,490 [Powered by Google Translate] [CS50 Kitabxana] 2 00:00:02,490 --> 00:00:04,220 [Nate Hardison] [Harvard Universiteti] 3 00:00:04,220 --> 00:00:07,260 [Bu CS50 edir. CS50.TV] 4 00:00:07,260 --> 00:00:11,510 The CS50 kitabxana biz cihaz yüklü bir faydalı vasitədir 5 00:00:11,510 --> 00:00:15,870 Siz proqramları yazmaq üçün daha asan daxil üçün tez users. 6 00:00:15,870 --> 00:00:21,670 Bu video, biz pərdə geri çəkmək lazımdır və CS50 kitabxana məhz nə oldu. 7 00:00:21,670 --> 00:00:25,520 >> C kitabxanalar haqqında video, sizdən # başlıqlarını faylları daxil haqqında danışmaq 8 00:00:25,520 --> 00:00:27,570 Sizin mənbə kitabxana, 9 00:00:27,570 --> 00:00:31,150 və sonra keçid mərhələsində ikili kitabxana fayl ilə keçid 10 00:00:31,150 --> 00:00:33,140 tərtibi prosesi. 11 00:00:33,140 --> 00:00:36,440 Başlığı fayllar kitabxana interface daxil. 12 00:00:36,440 --> 00:00:41,280 Yəni, onlar ətraflı istifadə etmək üçün kitabxana mövcud olan resursların bütün deyil, 13 00:00:41,280 --> 00:00:45,250 funksiyası bəyannamələrin, sabitləri və məlumat növləri kimi. 14 00:00:45,250 --> 00:00:48,890 Ikili kitabxana fayl, kitabxana həyata keçirilməsi şey 15 00:00:48,890 --> 00:00:54,580 olan kitabxana mövzu faylları və kitabxana var. c kodunu faylları tərtib edilir. 16 00:00:54,580 --> 00:00:59,820 >> Bu ikili kitabxana faylı ikili, yaxşı, var-ci ildən baxmaq çox maraqlı deyil. 17 00:00:59,820 --> 00:01:03,300 Belə ki, ən header kitabxana üçün faylları yerinə nəzər salaq. 18 00:01:03,300 --> 00:01:07,710 Bu halda, cs50.h. adlanan yalnız bir mövzu fayl var 19 00:01:07,710 --> 00:01:11,040 Biz istifadəçi yüklü sonra kataloqu daxildir 20 00:01:11,040 --> 00:01:15,150 başqa sistem kitabxanaları 'başlığı faylları ilə birlikdə. 21 00:01:15,150 --> 00:01:21,530 >> Siz görəcəksiniz ilk şey biri cs50.h # digər kitabxanalardan mövzu faylları ehtiva edir - 22 00:01:21,530 --> 00:01:25,670 float, limitlərinə, standart bool və standart lib. 23 00:01:25,670 --> 00:01:28,800 Yenə Həcm yeniləndirir deyil prinsipi sonra, 24 00:01:28,800 --> 00:01:33,490 digər bizim üçün alətlər istifadə edərək CS0 kitabxana inşa etdik. 25 00:01:33,490 --> 00:01:38,690 >> Siz kitabxana görəcəksiniz növbəti şey biz adlı yeni növü müəyyən ki "string". 26 00:01:38,690 --> 00:01:42,330 Bu xətt həqiqətən yalnız char * növü üçün bir alias yaradır, 27 00:01:42,330 --> 00:01:46,000 belə ki, magically atributları ilə yeni string növü imbue deyil 28 00:01:46,000 --> 00:01:49,650 adətən, digər dillərdə string obyektləri ilə bağlı 29 00:01:49,650 --> 00:01:50,850 belə uzunluğu kimi. 30 00:01:50,850 --> 00:01:55,180 Biz bu etdik səbəb Qori details yeni proqramçılar dəf etmək 31 00:01:55,180 --> 00:01:57,580 göstəricilərinə onlar hazır qədər. 32 00:01:57,580 --> 00:02:00,130 >> Mövzu fayl növbəti hissəsi funksiyaları elan edir 33 00:02:00,130 --> 00:02:04,410 bu CS50 kitabxana sənədləri ilə birlikdə təmin edir. 34 00:02:04,410 --> 00:02:06,940 Burada şərh detal səviyyəsində edək. 35 00:02:06,940 --> 00:02:10,560 Insanlar bu funksiyaları necə istifadə bilirik ki, bu mühüm super edir. 36 00:02:10,560 --> 00:02:19,150 Biz öz növbəsində, bəyan, istifadəçi və qaytarılması chars, ikiqat, üzüb gedirdi, ints, istemek üçün fəaliyyət 37 00:02:19,150 --> 00:02:24,160 uzun longs və strings, öz string növü istifadə edərək. 38 00:02:24,160 --> 00:02:26,260 Məlumat gizlətmək prinsipi sonra, 39 00:02:26,260 --> 00:02:31,640 . bir ayrı c həyata faylı bizim definition qoyduq - cs50.c - 40 00:02:31,640 --> 00:02:35,110 istifadəçi mənbə kataloq yerləşir. 41 00:02:35,110 --> 00:02:38,040 Siz nəzər ki, Biz ki, fayl verdik 42 00:02:38,040 --> 00:02:41,490 bu məlumat və istədiyiniz əgər müxtəlif maşınlar üzrə derleyeceğiz, 43 00:02:41,490 --> 00:02:45,510 biz bu sinfi üçün cihaz üzərində işləmək üçün daha yaxşı hesab edirəm baxmayaraq. 44 00:02:45,510 --> 00:02:47,580 Hər halda, indi bu nəzər salaq. 45 00:02:49,020 --> 00:02:54,620 >> Funksiyaları GetChar, GetDouble, GetFloat, GetInt və GetLongLong 46 00:02:54,620 --> 00:02:58,160 bütün GetString funksiyası üst inşa edilir. 47 00:02:58,160 --> 00:03:01,510 Onlar bütün mahiyyətcə eyni model aşağıdakı çıxır. 48 00:03:01,510 --> 00:03:04,870 Onlar daxil bir xətt üçün istifadəçi təklif bir müddət loop istifadə edin. 49 00:03:04,870 --> 00:03:08,430 Onlar istifadəçi giriş boş line əgər xüsusi bir dəyər qayıt. 50 00:03:08,430 --> 00:03:11,750 Onlar müvafiq növü kimi istifadəçi daxil analiz etməyə cəhd 51 00:03:11,750 --> 00:03:15,010 bir char, ikiqat, bir float və s olmaq 52 00:03:15,010 --> 00:03:18,710 Daxil uğurla ayrıştırılan edilib və onlar da nəticə qayıtmaq 53 00:03:18,710 --> 00:03:21,330 və ya istifadəçi reprompt. 54 00:03:21,330 --> 00:03:24,230 >> Yüksək səviyyədə, həqiqətən çətin bir şey burada var. 55 00:03:24,230 --> 00:03:28,760 Siz keçmişdə eyni strukturlaşdırılmış kodu özünüzü yazılı ola bilər. 56 00:03:28,760 --> 00:03:34,720 Bəlkə də ən sirli görünüşlü hissəsi istifadəçi daxil çözümler ki sscanf çağırışdır. 57 00:03:34,720 --> 00:03:38,160 Sscanf giriş format dönüşüm ailə hissəsidir. 58 00:03:38,160 --> 00:03:42,300 Bu standart io.h yaşayır və onun iş C simli analiz edir 59 00:03:42,300 --> 00:03:46,520 dəyişən ildə parse nəticələri saxlanılması, müəyyən format uyğun 60 00:03:46,520 --> 00:03:48,720 zəng tərəfindən təmin. 61 00:03:48,720 --> 00:03:53,570 Giriş format dönüşüm funksiyaları çox faydalı, çox istifadə funksiyaları ildən 62 00:03:53,570 --> 00:03:56,160 Əvvəlcə intuitiv super deyil 63 00:03:56,160 --> 00:03:58,300 biz sscanf necə artıq getmək lazımdır. 64 00:03:58,300 --> 00:04:03,330 >> Sscanf üçün ilk arqument bir char * - Bir xarakter bir göstərici. 65 00:04:03,330 --> 00:04:05,150 Funksiyası düzgün qaydada işləməyəcək, üçün 66 00:04:05,150 --> 00:04:08,340 ki, xarakteri, C simli ilk karakter olmalıdır 67 00:04:08,340 --> 00:04:12,270 bu null \ 0 xarakteri ilə xitam. 68 00:04:12,270 --> 00:04:15,120 Bu analiz üçün simli edir 69 00:04:15,120 --> 00:04:18,269 Sscanf ikinci dəlil, bir format string edir 70 00:04:18,269 --> 00:04:20,839 adətən, bir string daimi kimi qəbul 71 00:04:20,839 --> 00:04:24,040 və printf istifadə edərkən əvvəl bu kimi bir string görmüşəm bilər. 72 00:04:24,040 --> 00:04:28,650 Format string bir faiz giriş dönüşüm belirteci göstərir. 73 00:04:28,650 --> 00:04:30,850 Xarakteri dərhal bir faiz işarəsi aşağıdakı 74 00:04:30,850 --> 00:04:35,430 biz çevirmək sscanf istəyirəm ki, C tipi göstərir. 75 00:04:35,430 --> 00:04:40,090 GetInt, bir% d və% c olduğunu görürük. 76 00:04:40,090 --> 00:04:48,690 % D - - və char - Bu% c Bu sscanf bir decimal int çalışacağıq deməkdir. 77 00:04:48,690 --> 00:04:51,510 Format string hər dönüşüm belirteci üçün, 78 00:04:51,510 --> 00:04:56,620 sscanf onun arqument siyahısı müvafiq arqument sonra gözləyir. 79 00:04:56,620 --> 00:05:00,850 Bu arqument bir müvafiq tipli yeri qeyd olunmalıdır 80 00:05:00,850 --> 00:05:04,000 dönüşüm nəticəsində saxlamaq üçün olan. 81 00:05:04,000 --> 00:05:08,910 >> Bunu ən tipik yolu sscanf zəng əvvəl yığını bir dəyişən yaratmaq 82 00:05:08,910 --> 00:05:11,440 Siz simli olan analiz etmək istəyirəm ki, hər bir maddə üçün 83 00:05:11,440 --> 00:05:15,520 göstəricilərinə keçmək - Bu işareti - və sonra ünvan operator istifadə 84 00:05:15,520 --> 00:05:19,100 bu sscanf zəng etmək üçün o dəyişənlər üçün. 85 00:05:19,100 --> 00:05:22,720 Siz GetInt biz məhz bunu görə bilərsiniz. 86 00:05:22,720 --> 00:05:28,240 Sağ sscanf zəng əvvəl, biz, n adlı int və yığını bir char zəng c elan 87 00:05:28,240 --> 00:05:32,340 və biz sscanf zəng daxil onlara göstəricilərinə keçir. 88 00:05:32,340 --> 00:05:35,800 Yığını bu dəyişənlərin verilməsi ayrılmış yerin istifadə üzərində üstünlük verilir 89 00:05:35,800 --> 00:05:39,350 Siz malloc zəng yerüstü qarşısını ildən malloc ilə yığın, haqqında, 90 00:05:39,350 --> 00:05:43,060 və yaddaş sızması narahat yoxdur. 91 00:05:43,060 --> 00:05:47,280 Bir faiz işarəsi ilə prefixed deyil uchun dönüşüm təklif yoxdur. 92 00:05:47,280 --> 00:05:50,380 Əksinə onlar yalnız format dəqiqləşdirilməsi əlavə edin. 93 00:05:50,380 --> 00:05:56,500 >> Məsələn, GetInt biçimi simli əvəzinə% d olsaydı, 94 00:05:56,500 --> 00:05:59,800 sscanf, bir int sonra bir hərf üçün görünür 95 00:05:59,800 --> 00:06:04,360 bu int çevirmək üçün cəhd edəcəyini isə, bu bir ilə başqa bir şey deyil. 96 00:06:04,360 --> 00:06:07,440 Bu yeganə istisna ağ edir. 97 00:06:07,440 --> 00:06:11,030 Format string Ağ kosmik simvol ağ hər hansı məbləğ uyğun - 98 00:06:11,030 --> 00:06:12,890 bütün hətta heç biri. 99 00:06:12,890 --> 00:06:18,100 Yorum aparıcı və / və ya ağ arxada ilə bəlkə qeyd niyə Belə ki, var. 100 00:06:18,100 --> 00:06:22,910 Belə ki, bizim sscanf zəng kimi görünür bu nöqtədə istifadəçi daxil simli analiz etməyə çalışacağıq 101 00:06:22,910 --> 00:06:25,380 mümkün aparıcı ağ kontrol edərək, 102 00:06:25,380 --> 00:06:29,300 bu int dəyişən n çevrilir və saxlanılır ki, bir int sonra 103 00:06:29,300 --> 00:06:33,090 ağ bəzi məbləği izlədi və xarakter izlədi 104 00:06:33,090 --> 00:06:35,810 bu char dəyişən c saxlanılır. 105 00:06:35,810 --> 00:06:37,790 >> Qaytarılması dəyəri nədir? 106 00:06:37,790 --> 00:06:41,560 Sscanf, başdan giriş xətti analiz edəcək 107 00:06:41,560 --> 00:06:44,860 daxil bir xarakter onu sonuna çatdıqda dayandırılması və ya 108 00:06:44,860 --> 00:06:49,320 bir format xarakter uyğun deyil və ya bir dönüşüm etmək bilər. 109 00:06:49,320 --> 00:06:52,690 Bu qaytarılması dəyəri dayandırdığı vahid üçün istifadə olunur. 110 00:06:52,690 --> 00:06:55,670 Bu giriş simli sonuna çatmışdır, çünki o, dayandı edin 111 00:06:55,670 --> 00:07:00,630 Hər hansı bir dönüşüm etməzdən əvvəl və format string hissəsi uyğun etməyərək əvvəl, 112 00:07:00,630 --> 00:07:04,840 sonra xüsusi daimi EOF qaytarılır. 113 00:07:04,840 --> 00:07:08,200 Əks halda, bu, uğurlu dönüşüm sayı qaytarır 114 00:07:08,200 --> 00:07:14,380 biz iki dönüşüm üçün xahiş etdik bəri olan, 0, 1, 2 və ya ola bilər. 115 00:07:14,380 --> 00:07:19,000 Bizim halda, biz istifadəçi int və yalnız int çap əmin etmək istəyirəm. 116 00:07:19,000 --> 00:07:23,370 >> Belə ki, biz sscanf 1 qayıtmaq istəyirəm. Niyə görmək? 117 00:07:23,370 --> 00:07:26,850 Sscanf 0 döndü, onda heç bir dönüşüm edildi 118 00:07:26,850 --> 00:07:31,690 belə istifadəçi giriş əvvəlində bir int-dən başqa bir şey yazılmış. 119 00:07:31,690 --> 00:07:37,100 Sscanf 2 qaytarır, onda istifadəçi düzgün daxil əvvəlində bu yazın vermədi 120 00:07:37,100 --> 00:07:41,390 lakin sonra sonra bəzi qeyri-ağ xarakter tipli 121 00:07:41,390 --> 00:07:44,940 ən% ildən c dönüşüm oldu. 122 00:07:44,940 --> 00:07:49,570 Wow, ki, tamamilə bir funksiyası zəng üçün uzun izahat var. 123 00:07:49,570 --> 00:07:53,460 Hər halda, siz sscanf və onun qardaşları haqqında daha ətraflı məlumat istəyirsinizsə, 124 00:07:53,460 --> 00:07:57,130 adam pages, Google, və ya hər ikisi oldu. 125 00:07:57,130 --> 00:07:58,780 Format string variantları çox var, 126 00:07:58,780 --> 00:08:03,830 C. strings analiz çalışırken və bu siz əl əməyi bir çox saxlaya bilərsiniz 127 00:08:03,830 --> 00:08:07,180 >> Baxmaq üçün kitabxana son funksiyası GetString edir. 128 00:08:07,180 --> 00:08:10,310 Bu, GetString düzgün yazmaq çətin funksiyası çıxır ki, 129 00:08:10,310 --> 00:08:14,290 bu sadə, ümumi tapşırıq kimi görünür baxmayaraq. 130 00:08:14,290 --> 00:08:16,170 Nə üçün bu belədir? 131 00:08:16,170 --> 00:08:21,380 Yaxşı, necə biz line saxlamaq olacaq düşünmək edək ki, daxil istifadəçi növləri 132 00:08:21,380 --> 00:08:23,880 Simli chars bir ardıcıllıqla deyil, ildən 133 00:08:23,880 --> 00:08:26,430 biz yığını bir sıra onu saxlaya bilərsiniz 134 00:08:26,430 --> 00:08:31,250 lakin biz bəyan zaman array olacaq nə qədər bilmək lazımdır. 135 00:08:31,250 --> 00:08:34,030 Eyni zamanda, biz yığın qoyun istəyirsinizsə, 136 00:08:34,030 --> 00:08:38,090 biz malloc biz ehtiyat istəyirəm bytes sayı keçmək lazımdır 137 00:08:38,090 --> 00:08:39,730 lakin bu, mümkün deyil. 138 00:08:39,730 --> 00:08:42,760 Biz istifadəçi yazın necə çox chars heç bir fikrim yoxdur 139 00:08:42,760 --> 00:08:46,590 istifadəçi həqiqətən, onlara yazın deyil əvvəl. 140 00:08:46,590 --> 00:08:50,720 >> Bu problem üçün sadə həll yalnız, kosmik böyük bir yığın saxlayırıq ki, edir 141 00:08:50,720 --> 00:08:54,540 istifadəçi giriş üçün 1000 chars blokunun, 142 00:08:54,540 --> 00:08:57,980 istifadəçi uzun bir string yazın heç vaxt fərz etsək. 143 00:08:57,980 --> 00:09:00,810 Bu iki səbəbə görə pis bir fikirdir. 144 00:09:00,810 --> 00:09:05,280 Birincisi, istifadəçilər adətən uzun strings yazın olmayan fərz 145 00:09:05,280 --> 00:09:07,610 yaddaş bir çox sərf edə bilər. 146 00:09:07,610 --> 00:09:10,530 Bunu əgər müasir maşınlar, bu məsələ ola bilər 147 00:09:10,530 --> 00:09:13,890 bir və ya iki ayrı-ayrı hallarda, 148 00:09:13,890 --> 00:09:17,630 ancaq bir döngü istifadəçi daxil edir və sonra istifadə üçün saxlanılması edirsinizsə, 149 00:09:17,630 --> 00:09:20,870 tez yaddaş ton qədər sormaq bilər. 150 00:09:20,870 --> 00:09:24,450 Bundan əlavə, əgər yazılı etdiyiniz proqram kiçik bir kompüter üçün - 151 00:09:24,450 --> 00:09:28,100 məhdud yaddaş ilə smartphone və ya başqa bir şey kimi bir cihaz - 152 00:09:28,100 --> 00:09:32,060 Bu həll bir çox daha sürətli problemləri səbəb olacaq. 153 00:09:32,060 --> 00:09:36,450 Bunu ikinci, daha ciddi səbəb bu həssas proqram yaradır ki, 154 00:09:36,450 --> 00:09:39,710 bufer daşqın hücum deyirlər nə. 155 00:09:39,710 --> 00:09:45,840 Proqramlaşdırma, bir bufer müvəqqəti giriş və ya çıxış veri istifadə yaddaşı 156 00:09:45,840 --> 00:09:48,980 bu halda bizim 1000-char blok olan. 157 00:09:48,980 --> 00:09:53,370 Data blokunun sonunda keçmiş yazılı zaman bir bufer daşqın baş verir. 158 00:09:53,370 --> 00:09:57,790 >> Məsələn, bir istifadəçi əslində 1000-dən çox chars yazın əgər. 159 00:09:57,790 --> 00:10:01,570 Diziler ilə proqramlaşdırma zaman təsadüfən bu təcrübəli ola bilər. 160 00:10:01,570 --> 00:10:05,620 10 ints bir sıra varsa, heç bir şey oxumaq və ya yazmaq üçün çalışırıq sizə vermir 161 00:10:05,620 --> 00:10:07,810 15 int. 162 00:10:07,810 --> 00:10:10,000 Heç bir compiler xəbərdarlıq və ya səhvlər var. 163 00:10:10,000 --> 00:10:13,250 Bu proqram yalnız düz irəli blunders və yaddaş çatmaz 164 00:10:13,250 --> 00:10:18,150 o hesab etdiyi 15 int olacaq və bu digər dəyişənlərin üzerine bilər. 165 00:10:18,150 --> 00:10:22,040 Ən pis halda, siz proqram daxili bəzi üzerine bilər 166 00:10:22,040 --> 00:10:26,820 nəzarət mexanizmləri, proqram səbəb əslində müxtəlif təlimat yerinə 167 00:10:26,820 --> 00:10:28,340 Əgər nəzərdə tutulan çox. 168 00:10:28,340 --> 00:10:31,360 >> İndi, o, təsadüfən bunu ümumi deyil 169 00:10:31,360 --> 00:10:35,150 ancaq bu pis uşaqlar proqramları pozmaq üçün istifadə edən kifayət qədər ümumi texnika 170 00:10:35,150 --> 00:10:39,080 və digər insanların kompüter zərərli kodu qoydu. 171 00:10:39,080 --> 00:10:42,910 Buna görə də, biz yalnız bizim sadəlövh həll istifadə edə bilməz. 172 00:10:42,910 --> 00:10:45,590 Biz zəif olan bizim proqramları qarşısını almaq üçün bir yol lazımdır 173 00:10:45,590 --> 00:10:47,880 bufer daşqın hücum. 174 00:10:47,880 --> 00:10:51,430 Bunu etmək üçün, biz oxumaq kimi bufer inkişaf edə bilər ki, əmin etmək lazımdır 175 00:10:51,430 --> 00:10:53,850 istifadəçi daha girdi. 176 00:10:53,850 --> 00:10:57,440 Həlli? Biz bir yığın ayrılmış tampon istifadə edin. 177 00:10:57,440 --> 00:10:59,950 Biz boyutlandır bilər-ci ildən o, ölçüsünü də realloc funksiyasından istifadə 178 00:10:59,950 --> 00:11:04,580 və biz iki ədəd takip - Növbəti boş slot göstəricisi tampon ilə 179 00:11:04,580 --> 00:11:08,390 , uzunluğu və ya tampon gücü. 180 00:11:08,390 --> 00:11:13,210 Biz fgetc funksiyası istifadə edərək, bir vaxt istifadəçi bir Sandıqı oxumaq. 181 00:11:13,210 --> 00:11:19,360 Stdin - - Bu fgetc funksiyası edir arqument, standart giriş string istinad edir 182 00:11:19,360 --> 00:11:23,810 hansı istifadəçi daxil köçürmək üçün istifadə bir preconnected giriş kanalı 183 00:11:23,810 --> 00:11:26,270 terminaldan proqram. 184 00:11:26,270 --> 00:11:29,890 >> Zaman yeni bir xarakter istifadəçi növləri, biz kontrol əgər indeksi 185 00:11:29,890 --> 00:11:35,810 növbəti pulsuz slot müsbət 1 bufer tutumu çox böyükdür. 186 00:11:35,810 --> 00:11:39,690 The +1, növbəti pulsuz index 5 əgər çünki gəlir 187 00:11:39,690 --> 00:11:44,150 sonra bufer uzunluğu 6 sayəsində 0 endeksleme olmalıdır. 188 00:11:44,150 --> 00:11:48,350 Biz bufer yer tökülmək varsa, onda biz, bu ölçüsünü cəhd 189 00:11:48,350 --> 00:11:51,690 biz ölçüsünü ki, sayını azaltmaq ki, bu misli 190 00:11:51,690 --> 00:11:54,760 istifadəçi həqiqətən uzun string yazaraq olunur. 191 00:11:54,760 --> 00:11:57,950 Simli çox uzun kazanılmış və ya biz yığın yaddaş tökülmək əgər varsa, 192 00:11:57,950 --> 00:12:01,350 biz bufer və qaytarılması null pulsuz. 193 00:12:01,350 --> 00:12:04,170 >> Nəhayət, biz bufer üçün char əlavə. 194 00:12:04,170 --> 00:12:08,200 Istifadəçi Xit daxil edin və ya qayıtmaq, yeni xətt siqnalizasiya, sonra 195 00:12:08,200 --> 00:12:12,050 və ya xüsusi char - nəzarət d - input son xəbərdarlıq edən 196 00:12:12,050 --> 00:12:16,240 biz istifadəçi həqiqətən bütün bir şey çap görmek üçün bir çek yoxdur. 197 00:12:16,240 --> 00:12:18,820 Əgər, biz null qayıtmaq. 198 00:12:18,820 --> 00:12:22,280 Əks halda, bizim bufer biz ehtiyac çox güman ki, daha böyük, çünki 199 00:12:22,280 --> 00:12:24,830 ən pis halda biz lazım olan kimi demək olar ki, iki dəfə böyük var 200 00:12:24,830 --> 00:12:27,830 biz ölçüsünü hər dəfə iki ildən 201 00:12:27,830 --> 00:12:31,840 biz lazımdır ki, yer yalnız məbləği istifadə edərək string yeni bir kopyasını edir. 202 00:12:31,840 --> 00:12:34,220 Biz malloc zəng üçün əlavə 1 əlavə 203 00:12:34,220 --> 00:12:37,810 olan \ 0 - xüsusi null terminator xarakter üçün yer var ki, 204 00:12:37,810 --> 00:12:41,990 olan biz simvol qalan surəti dəfə biz simli üçün əlavə, 205 00:12:41,990 --> 00:12:45,060 əvəzinə strcpy və strncpy istifadə 206 00:12:45,060 --> 00:12:48,830 ki, biz kopyalamak etmək istəyirsinizsə tam olaraq necə bir çox chars belirtebilirsiniz. 207 00:12:48,830 --> 00:12:51,690 Bir \ 0 xit qədər Strcpy nüsxə. 208 00:12:51,690 --> 00:12:55,740 Sonra bufer azad və zəng etmək surəti geri. 209 00:12:55,740 --> 00:12:59,840 >> Kim belə bir sadə zahiri funksiyası belə mürəkkəb ola bilər bilirdi? 210 00:12:59,840 --> 00:13:02,820 İndi CS50 kitabxana gider bilirik. 211 00:13:02,820 --> 00:13:06,470 >> My name Nate Hardison və bu CS50 edir. 212 00:13:06,470 --> 00:13:08,350 [CS50.TV]