დევიდ ჯ Malan: ასე რომ, აღმოჩნდება, რომ გადაწერა სიმებიანი არ არის თითქმის როგორც მარტივია, კოპირება პრიმიტიული, როგორც int ან float. ყოველივე ამის შემდეგ, ქვეშ Hood სიმებიანი არის თანმიმდევრობა სიმბოლო. ასე რომ, კოპირება სიმებიანი, შესაბამისად, აქვს ჩართვა კოპირება რომ მთელი თანმიმდევრობა სიმბოლო. მოდით იქცეს ჩვენი ყურადღება თავში, რომ ბოლო განხორციელებას და დააკოპიროთ ამ ხაზი, string t შეადგენს s, რომელიც აშკარად არ იყო საკმარისი. მოდით შეცვალოს იგი ხაზი, გამოიყურება, ნაცვლად, მოსწონს ეს. String t იღებს malloc სიმებიანი ხანგრძლივობა s პლუს 1 ჯერ ზომა char. ახლა არის გაცემა ცოტა აპირებს on ამ ხაზი კოდი. პირველი, malloc, მოკლე მეხსიერება განაწილების და ფუნქცია აკეთებს უბრალოდ რომ. მოცემული რიცხვი, ის დააბრუნებს თქვენ მისამართი ბლოკი მეხსიერება რომ ბევრი bytes. იმავდროულად, string სიგრძე s პლუს 1 იგულისხმება, მიუთითებს იმაზე, რომ ჩვენ გვინდა, როგორც ბევრი bytes როგორც უკვე უკავია, მათ შორის მისი null terminator, backslash 0 დასასრულს სიმებიანი. ამასობაში, მე არ ემთხვეოდეს გვახსოვდეს რამდენად დიდი char არის, მაშინაც კი, თუმცა უმეტეს სისტემების ეს უბრალოდ 1 byte, ასე რომ, მე მოვუწოდებ ზომა char to გაერკვნენ დინამიურად რამდენად დიდი ინდივიდუალური ხასიათი. მას შემდეგ, რაც გამრავლებული ერთად, მივიღებ უკან საერთო რაოდენობის ბაიტი, რომ მჭირდება. მაგრამ რა, თუ malloc ვერ დაბრუნების მეხსიერება გვჭირდება? მინდა საუკეთესო შეამოწმოთ, რომ ასეთია. იმ შემთხვევაში, თუ t უდრის null, მაშინ მე პირველი აპირებს თავისუფალი s, მეხსიერების დაბრუნდა მისაღებად სიმებიანი და შემდეგ მე ვაპირებ დაბრუნდება 1 ნიშნავდეს შეცდომა. მაგრამ თუ ყველაფერი კარგად, მე ვაპირებ გაგრძელება გამოყენება ოთხი მარყუჟის და iterate ასეთია. განთავსების int i კიდევ 0, n შეადგენს სიმებიანი სიგრძე s. მე ვაპირებ ამის გაკეთება ისე, სანამ მე ნაკლებია ან ტოლი n ისე, რომ მე iterate მეშვეობით და მათ შორის null შეწყვეტის ხასიათი s. და თითოეულ iteration, მე ვარ ვაპირებთ ნამატი i. იმავდროულად, შიგნით ამ loop, კოპირება ის i-th ხასიათი თარგმნეს t-ს i-th მდებარეობა, საკმარისია გავაკეთოთ t bracket i იღებს s bracket i. მინდა საუკეთესო დაამატოთ ერთი დამატებითი ხაზი ჩემი კოდი. კერძოდ, იმის გამო, რომ მე ახლა გამოყენებით malloc, ითხოვენ მეხსიერების, ეს ჩემი პასუხისმგებლობის გასათავისუფლებლად, რომ მეხსიერების როდესაც მე გაკეთდეს ეს, ისევე, როგორც ჩვენ უნდა გამონთავისუფლების მეხსიერება რომ ენიჭება ჩვენს მიერ მისაღებად string. ასე რომ ბოლომდე ამ პროგრამის, მე ვარ აპირებს დაამატოთ ერთი დამატებითი ხაზი თავისუფალი t სანამ 0 მიუთითოს წარმატება. მოდით ახლა გადარჩენა, კომპილირდება და აწარმოებს ამ ახალი პროგრამა. მიიღოს ასლი 1 dot slash ასლი 1. და მე ვთქვა რაღაც მიესალმები ყველა ამას. და საბედნიეროდ, ამ დროს ჩემი ორიგინალური უცვლელი რჩება. მიესალმები ყველა ამას. მაგრამ ასლი არის, მართლაც, კაპიტალიზაცია.