>> 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.
>> 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.