1 00:00:00,000 --> 00:00:00,410 2 00:00:00,410 --> 00:00:03,130 >> დევიდ ჯ Malan: ასე რომ, აღმოჩნდება, რომ გადაწერა სიმებიანი არ არის თითქმის როგორც 3 00:00:03,130 --> 00:00:05,750 მარტივია, კოპირება პრიმიტიული, როგორც int ან float. 4 00:00:05,750 --> 00:00:09,190 ყოველივე ამის შემდეგ, ქვეშ Hood სიმებიანი არის თანმიმდევრობა სიმბოლო. 5 00:00:09,190 --> 00:00:13,130 ასე რომ, კოპირება სიმებიანი, შესაბამისად, აქვს ჩართვა კოპირება რომ მთელი თანმიმდევრობა 6 00:00:13,130 --> 00:00:14,240 სიმბოლო. 7 00:00:14,240 --> 00:00:17,470 >> მოდით იქცეს ჩვენი ყურადღება თავში, რომ ბოლო განხორციელებას და დააკოპიროთ ამ 8 00:00:17,470 --> 00:00:21,470 ხაზი, string t შეადგენს s, რომელიც აშკარად არ იყო საკმარისი. 9 00:00:21,470 --> 00:00:24,440 მოდით შეცვალოს იგი ხაზი, გამოიყურება, ნაცვლად, მოსწონს ეს. 10 00:00:24,440 --> 00:00:34,020 String t იღებს malloc სიმებიანი ხანგრძლივობა s პლუს 1 ჯერ ზომა char. 11 00:00:34,020 --> 00:00:36,320 >> ახლა არის გაცემა ცოტა აპირებს on ამ ხაზი კოდი. 12 00:00:36,320 --> 00:00:39,330 პირველი, malloc, მოკლე მეხსიერება განაწილების და 13 00:00:39,330 --> 00:00:40,700 ფუნქცია აკეთებს უბრალოდ რომ. 14 00:00:40,700 --> 00:00:44,740 მოცემული რიცხვი, ის დააბრუნებს თქვენ მისამართი ბლოკი მეხსიერება 15 00:00:44,740 --> 00:00:45,960 რომ ბევრი bytes. 16 00:00:45,960 --> 00:00:50,090 იმავდროულად, string სიგრძე s პლუს 1 იგულისხმება, მიუთითებს იმაზე, რომ ჩვენ გვინდა, როგორც 17 00:00:50,090 --> 00:00:54,690 ბევრი bytes როგორც უკვე უკავია, მათ შორის მისი null terminator, 18 00:00:54,690 --> 00:00:57,050 backslash 0 დასასრულს სიმებიანი. 19 00:00:57,050 --> 00:01:00,170 >> ამასობაში, მე არ ემთხვეოდეს გვახსოვდეს რამდენად დიდი char არის, მაშინაც კი, 20 00:01:00,170 --> 00:01:04,340 თუმცა უმეტეს სისტემების ეს უბრალოდ 1 byte, ასე რომ, მე მოვუწოდებ ზომა char to 21 00:01:04,340 --> 00:01:08,210 გაერკვნენ დინამიურად რამდენად დიდი ინდივიდუალური ხასიათი. 22 00:01:08,210 --> 00:01:12,550 მას შემდეგ, რაც გამრავლებული ერთად, მივიღებ უკან საერთო რაოდენობის ბაიტი, რომ მჭირდება. 23 00:01:12,550 --> 00:01:14,680 >> მაგრამ რა, თუ malloc ვერ დაბრუნების მეხსიერება გვჭირდება? 24 00:01:14,680 --> 00:01:16,730 მინდა საუკეთესო შეამოწმოთ, რომ ასეთია. 25 00:01:16,730 --> 00:01:23,330 იმ შემთხვევაში, თუ t უდრის null, მაშინ მე პირველი აპირებს თავისუფალი s, მეხსიერების დაბრუნდა მისაღებად 26 00:01:23,330 --> 00:01:27,120 სიმებიანი და შემდეგ მე ვაპირებ დაბრუნდება 1 ნიშნავდეს შეცდომა. 27 00:01:27,120 --> 00:01:30,360 >> მაგრამ თუ ყველაფერი კარგად, მე ვაპირებ გაგრძელება გამოყენება ოთხი მარყუჟის და iterate 28 00:01:30,360 --> 00:01:31,110 ასეთია. 29 00:01:31,110 --> 00:01:36,000 განთავსების int i კიდევ 0, n შეადგენს სიმებიანი სიგრძე s. 30 00:01:36,000 --> 00:01:40,350 მე ვაპირებ ამის გაკეთება ისე, სანამ მე ნაკლებია ან ტოლი n ისე, რომ მე 31 00:01:40,350 --> 00:01:44,460 iterate მეშვეობით და მათ შორის null შეწყვეტის ხასიათი s. 32 00:01:44,460 --> 00:01:47,450 >> და თითოეულ iteration, მე ვარ ვაპირებთ ნამატი i. 33 00:01:47,450 --> 00:01:52,496 იმავდროულად, შიგნით ამ loop, კოპირება ის i-th ხასიათი თარგმნეს t-ს i-th 34 00:01:52,496 --> 00:01:59,310 მდებარეობა, საკმარისია გავაკეთოთ t bracket i იღებს s bracket i. 41 00:01:59,320 --> 00:02:02,750 >> მოდით ახლა გადარჩენა, კომპილირდება და აწარმოებს ამ ახალი პროგრამა. 42 00:02:02,750 --> 00:02:06,690 მიიღოს ასლი 1 dot slash ასლი 1. 43 00:02:06,690 --> 00:02:09,460 და მე ვთქვა რაღაც მიესალმები ყველა ამას. 44 00:02:09,460 --> 00:02:12,280 და საბედნიეროდ, ამ დროს ჩემი ორიგინალური უცვლელი რჩება. 45 00:02:12,280 --> 00:02:13,660 მიესალმები ყველა ამას. 46 00:02:13,660 --> 00:02:15,540 მაგრამ ასლი არის, მართლაც, კაპიტალიზაცია. 47 00:02:37,120 --> 00:02:38,963