David J. MALAN: Kaya ito ay lumiliko out na pagkopya ng isang string ay hindi halos bilang simple ng pagkopya ng isang primitive, tulad ng isang int o isang float. Pagkatapos ng lahat, sa ilalim ng hood ng string ay isang pagkakasunod-sunod na mga character. Kaya pagkopya ng isang string, samakatuwid, ay upang sangkot sa pagkopya na buong pagkakasunod-sunod ng character. Ni i-alaman pabalik sa na Hayaan huling pagpapatupad at rip out na ito linya, string t ay katumbas s, na malinaw na ay hindi sapat. Palitan ng ito sa isang line Hayaan na mukhang, sa halip, tulad nito. String t nakakakuha malloc ng string haba ng s plus 1 beses ang laki ng isang pansamantalang trabaho. Ngayon ay mayroong isang bit ng pagpunta kung quote sa sa ganitong linya ng code. Una, malloc, maikli para sa memory laang-gugulin, at ang function na ginagawa lamang na. Given isang integer, nagbabalik ito sa iyo ang address ng isang tipak ng memorya ng na maraming bytes. Samantala, ang haba string ng mga plus 1 ay sinadya upang ipahiwatig na gusto naming bilang maraming mga byte bilang na sumasakop s, kasama nito null Terminator, ang backslash 0 sa dulo ng isang string. Samantala, ako ay hindi kinakailangang tandaan kung gaano kalaki ang isang pansamantalang trabaho ay, kahit na bagaman sa karamihan ng mga sistema ng ito ay lamang 1 byte, kaya Tatawag ako laki ng pansamantalang trabaho sa malaman kung paano dynamic na malaki isang indibidwal na character ay. Sa sandaling na-multiply magkasama, nakakatanggap ako ng pabalik ang kabuuang bilang ng mga byte na kailangan ko. Ngunit paano kung malloc nabigong ibalik ang memory kailangan namin? Gusto ko pinakamahusay na suriin para sa na tulad ng sumusunod. Kung katumbas t null, pagkatapos ay ako unang pagpunta sa libreng s, ang memory na ibinalik sa pamamagitan get string, at pagkatapos ay pupuntahan ko bumalik 1, upang maging tanda ng error. Ngunit kung ang lahat ay mabuti, pupuntahan ko magpatuloy gumamit ng apat na loop at umulit tulad ng mga sumusunod. Para sa int makakuha i 0, n Kapantay ang haba ng string ng mga s. Pupunta ako upang gawin ito hangga't i ay mas mababa sa o katumbas ng n kaya na ako umulit up sa pamamagitan ng at kabilang ang null pagwawakas ng character sa s. At sa bawat pag-ulit, ako pagpunta sa dagdagan i. Samantala, sa loob ng loop na ito, kopyahin ni ika-i karakter sa i-ika t ni lokasyon, suffices ito upang gawin t bracket ay nakakakuha i s bracket i. Gusto ko pinakamahusay na magdagdag ng isang karagdagang linya sa aking code. Sa partikular, dahil ako ngayon ay gumagamit ng malloc, humihingi ng memorya, ito ay aking responsibilidad sa libreng up na memory kapag ako tapos dito, gusto lang namin dapat pagbabakante memory na ibinigay sa atin sa pamamagitan ng get string. Kaya sa pinakadulo ng programang ito, ako pagpunta sa magdagdag ng isang karagdagang linya sa libreng t bago bumalik 0 upang isaad tagumpay. Sabihin ngayong i-save, sumulat ng libro, at patakbuhin ang bagong programa. Gumawa ng kopya ng 1 tuldok slash kopya 1. At Sasabihin kong isang bagay tulad ng kumusta sa lahat ng maliit na. At thankfully, oras na ito ang aking orihinal na nananatiling hindi nabago. kumusta sa lahat ng maliit na. Ngunit ang kopya ay, sa katunayan, sa malaking titik.