1 00:00:00,000 --> 00:00:00,410 2 00:00:00,410 --> 00:00:03,130 >> DAVID J. Malan: Vì vậy, nó chỉ ra rằng sao chép một chuỗi gần như không 3 00:00:03,130 --> 00:00:05,750 đơn giản như sao chép một nguyên thủy, như một int hoặc float. 4 00:00:05,750 --> 00:00:09,190 Sau khi tất cả, bên dưới mui xe một chuỗi là một nhân vật theo thứ tự. 5 00:00:09,190 --> 00:00:13,130 Vì vậy, việc sao chép một chuỗi, do đó, phải liên quan đến việc sao chép mà toàn bộ chuỗi các 6 00:00:13,130 --> 00:00:14,240 ký tự. 7 00:00:14,240 --> 00:00:17,470 >> Chúng ta hãy chuyển sự chú ý của chúng tôi lại cho rằng thực hiện cuối cùng và rip ra điều này 8 00:00:17,470 --> 00:00:21,470 dòng, chuỗi t bằng, mà rõ ràng là không đủ. 9 00:00:21,470 --> 00:00:24,440 Chúng ta hãy thay thế nó bằng một dòng trông, thay vào đó, như thế này. 10 00:00:24,440 --> 00:00:34,020 Chuỗi t được malloc chiều dài chuỗi s cộng với 1 lần kích thước của một char. 11 00:00:34,020 --> 00:00:36,320 >> Bây giờ có trích dẫn một chút đi trên trong dòng mã này. 12 00:00:36,320 --> 00:00:39,330 Đầu tiên, malloc, viết tắt của bộ nhớ phân bổ, và 13 00:00:39,330 --> 00:00:40,700 chức năng hiện điều đó. 14 00:00:40,700 --> 00:00:44,740 Đưa ra một số nguyên, nó sẽ trả về cho bạn địa chỉ của một đoạn bộ nhớ của 15 00:00:44,740 --> 00:00:45,960 mà nhiều byte. 16 00:00:45,960 --> 00:00:50,090 Trong khi đó, chiều dài chuỗi s cộng với 1 có nghĩa là để chỉ ra rằng chúng tôi muốn như 17 00:00:50,090 --> 00:00:54,690 nhiều byte như s đã chiếm, bao gồm terminator null của nó, là 18 00:00:54,690 --> 00:00:57,050 dấu gạch chéo ngược 0 ở cuối của một chuỗi. 19 00:00:57,050 --> 00:01:00,170 >> Trong khi đó, tôi không nhất thiết phải nhớ lớn như thế nào một char là, ngay cả 20 00:01:00,170 --> 00:01:04,340 mặc dù trên hầu hết các hệ thống nó chỉ đơn giản 1 byte, vì vậy tôi sẽ gọi cho kích thước của char 21 00:01:04,340 --> 00:01:08,210 tìm ra động lớn như thế nào một nhân vật cá nhân. 22 00:01:08,210 --> 00:01:12,550 Một khi nhân với nhau, tôi lấy lại tổng số byte mà tôi cần. 23 00:01:12,550 --> 00:01:14,680 >> Nhưng nếu malloc không trả lại bộ nhớ chúng ta cần? 24 00:01:14,680 --> 00:01:16,730 Tôi muốn kiểm tra tốt nhất cho điều đó như sau. 25 00:01:16,730 --> 00:01:23,330 Nếu t bằng null, sau đó tôi lần đầu tiên đi để miễn phí, bộ nhớ được trả về bởi get 26 00:01:23,330 --> 00:01:27,120 chuỗi, và sau đó tôi sẽ trả lại 1, để biểu thị lỗi. 27 00:01:27,120 --> 00:01:30,360 >> Nhưng nếu tất cả là tốt, tôi sẽ tiến hành để sử dụng một vòng bốn và lặp 28 00:01:30,360 --> 00:01:31,110 như sau. 29 00:01:31,110 --> 00:01:36,000 Cho int tôi nhận được 0, n bình đẳng chiều dài chuỗi s. 30 00:01:36,000 --> 00:01:40,350 Tôi sẽ làm điều này miễn là tôi là nhỏ hơn hoặc bằng n để tôi 31 00:01:40,350 --> 00:01:44,460 lặp lên thông qua và bao gồm cả vô nhân vật chấm dứt trong s. 32 00:01:44,460 --> 00:01:47,450 >> Và mỗi lần lặp, tôi sẽ tăng i. 33 00:01:47,450 --> 00:01:52,496 Trong khi đó, bên trong vòng lặp này, sao chép s của nhân vật thứ i vào thứ i t của 34 00:01:52,496 --> 00:01:59,310 vị trí, nó cũng đủ để làm t khung tôi được s khung i. 41 00:01:59,320 --> 00:02:02,750 >> Bây giờ chúng ta tiết kiệm, biên dịch, và chạy chương trình mới này. 42 00:02:02,750 --> 00:02:06,690 Làm sao 1 dấu chấm dấu gạch chéo bản sao 1. 43 00:02:06,690 --> 00:02:09,460 Và tôi sẽ nói điều gì đó như xin chào tất cả các chữ thường. 44 00:02:09,460 --> 00:02:12,280 Và may mắn thay, thời gian này của tôi ban đầu vẫn không thay đổi. 45 00:02:12,280 --> 00:02:13,660 xin chào tất cả các chữ thường. 46 00:02:13,660 --> 00:02:15,540 Nhưng các bản sao là, thực sự, viết hoa. 47 00:02:37,120 --> 00:02:38,963