1 00:00:00,000 --> 00:00:00,410 2 00:00:00,410 --> 00:00:03,130 >> David J. MALAN: Kaya ito ay lumiliko out na pagkopya ng isang string ay hindi halos bilang 3 00:00:03,130 --> 00:00:05,750 simple ng pagkopya ng isang primitive, tulad ng isang int o isang float. 4 00:00:05,750 --> 00:00:09,190 Pagkatapos ng lahat, sa ilalim ng hood ng string ay isang pagkakasunod-sunod na mga character. 5 00:00:09,190 --> 00:00:13,130 Kaya pagkopya ng isang string, samakatuwid, ay upang sangkot sa pagkopya na buong pagkakasunod-sunod ng 6 00:00:13,130 --> 00:00:14,240 character. 7 00:00:14,240 --> 00:00:17,470 >> Ni i-alaman pabalik sa na Hayaan huling pagpapatupad at rip out na ito 8 00:00:17,470 --> 00:00:21,470 linya, string t ay katumbas s, na malinaw na ay hindi sapat. 9 00:00:21,470 --> 00:00:24,440 Palitan ng ito sa isang line Hayaan na mukhang, sa halip, tulad nito. 10 00:00:24,440 --> 00:00:34,020 String t nakakakuha malloc ng string haba ng s plus 1 beses ang laki ng isang pansamantalang trabaho. 11 00:00:34,020 --> 00:00:36,320 >> Ngayon ay mayroong isang bit ng pagpunta kung quote sa sa ganitong linya ng code. 12 00:00:36,320 --> 00:00:39,330 Una, malloc, maikli para sa memory laang-gugulin, at ang 13 00:00:39,330 --> 00:00:40,700 function na ginagawa lamang na. 14 00:00:40,700 --> 00:00:44,740 Given isang integer, nagbabalik ito sa iyo ang address ng isang tipak ng memorya ng 15 00:00:44,740 --> 00:00:45,960 na maraming bytes. 16 00:00:45,960 --> 00:00:50,090 Samantala, ang haba string ng mga plus 1 ay sinadya upang ipahiwatig na gusto naming bilang 17 00:00:50,090 --> 00:00:54,690 maraming mga byte bilang na sumasakop s, kasama nito null Terminator, ang 18 00:00:54,690 --> 00:00:57,050 backslash 0 sa dulo ng isang string. 19 00:00:57,050 --> 00:01:00,170 >> Samantala, ako ay hindi kinakailangang tandaan kung gaano kalaki ang isang pansamantalang trabaho ay, kahit na 20 00:01:00,170 --> 00:01:04,340 bagaman sa karamihan ng mga sistema ng ito ay lamang 1 byte, kaya Tatawag ako laki ng pansamantalang trabaho sa 21 00:01:04,340 --> 00:01:08,210 malaman kung paano dynamic na malaki isang indibidwal na character ay. 22 00:01:08,210 --> 00:01:12,550 Sa sandaling na-multiply magkasama, nakakatanggap ako ng pabalik ang kabuuang bilang ng mga byte na kailangan ko. 23 00:01:12,550 --> 00:01:14,680 >> Ngunit paano kung malloc nabigong ibalik ang memory kailangan namin? 24 00:01:14,680 --> 00:01:16,730 Gusto ko pinakamahusay na suriin para sa na tulad ng sumusunod. 25 00:01:16,730 --> 00:01:23,330 Kung katumbas t null, pagkatapos ay ako unang pagpunta sa libreng s, ang memory na ibinalik sa pamamagitan get 26 00:01:23,330 --> 00:01:27,120 string, at pagkatapos ay pupuntahan ko bumalik 1, upang maging tanda ng error. 27 00:01:27,120 --> 00:01:30,360 >> Ngunit kung ang lahat ay mabuti, pupuntahan ko magpatuloy gumamit ng apat na loop at umulit 28 00:01:30,360 --> 00:01:31,110 tulad ng mga sumusunod. 29 00:01:31,110 --> 00:01:36,000 Para sa int makakuha i 0, n Kapantay ang haba ng string ng mga s. 30 00:01:36,000 --> 00:01:40,350 Pupunta ako upang gawin ito hangga't i ay mas mababa sa o katumbas ng n kaya na ako 31 00:01:40,350 --> 00:01:44,460 umulit up sa pamamagitan ng at kabilang ang null pagwawakas ng character sa s. 32 00:01:44,460 --> 00:01:47,450 >> At sa bawat pag-ulit, ako pagpunta sa dagdagan i. 33 00:01:47,450 --> 00:01:52,496 Samantala, sa loob ng loop na ito, kopyahin ni ika-i karakter sa i-ika t ni 34 00:01:52,496 --> 00:01:59,310 lokasyon, suffices ito upang gawin t bracket ay nakakakuha i s bracket i. 41 00:01:59,320 --> 00:02:02,750 >> Sabihin ngayong i-save, sumulat ng libro, at patakbuhin ang bagong programa. 42 00:02:02,750 --> 00:02:06,690 Gumawa ng kopya ng 1 tuldok slash kopya 1. 43 00:02:06,690 --> 00:02:09,460 At Sasabihin kong isang bagay tulad ng kumusta sa lahat ng maliit na. 44 00:02:09,460 --> 00:02:12,280 At thankfully, oras na ito ang aking orihinal na nananatiling hindi nabago. 45 00:02:12,280 --> 00:02:13,660 kumusta sa lahat ng maliit na. 46 00:02:13,660 --> 00:02:15,540 Ngunit ang kopya ay, sa katunayan, sa malaking titik. 47 00:02:37,120 --> 00:02:38,963