1 00:00:00,000 --> 00:00:00,410 2 00:00:00,410 --> 00:00:03,130 >> DAVID เจลัน: ดังนั้นปรากฎว่า คัดลอกสตริงไม่ได้เกือบเป็น 3 00:00:03,130 --> 00:00:05,750 ง่ายเหมือนกับการคัดลอกดั้งเดิม, เช่น int หรือลอย 4 00:00:05,750 --> 00:00:09,190 หลังจากที่ทั้งหมดภายใต้ประทุนสตริง เป็นตัวอักษรลำดับ 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 สายสตริงทีเท่ากับ s ซึ่ง อย่างชัดเจนไม่เพียงพอ 9 00:00:21,470 --> 00:00:24,440 ลองแทนที่ด้วยสายที่ ดูแทนเช่นนี้ 10 00:00:24,440 --> 00:00:34,020 สตริงทีได้รับ malloc ความยาวสตริงของ s บวก 1 เท่าของขนาดของถ่าน 11 00:00:34,020 --> 00:00:36,320 >> ขณะนี้จะมีการอ้างอิงไปนิด ในบรรทัดของรหัสนี้ 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 ไบต์ที่หลาย 16 00:00:45,960 --> 00:00:50,090 ในขณะที่ความยาวสตริงของ s บวก 1 มีขึ้นเพื่อแสดงให้เห็นว่าเราต้องการเป็น 17 00:00:50,090 --> 00:00:54,690 ไบต์เป็นจำนวนมาก s ตรงแล้ว รวมทั้งยุติ null การทำงานที่ 18 00:00:54,690 --> 00:00:57,050 0 ทับขวาที่ส่วนท้ายของสตริง 19 00:00:57,050 --> 00:01:00,170 >> ในขณะที่ฉันไม่จำเป็นต้องจำ วิธีใหญ่เป็นถ่านแม้ 20 00:01:00,170 --> 00:01:04,340 แต่ในระบบส่วนใหญ่เป็นเพียง 1 ไบต์ดังนั้นฉันจะเรียกขนาดของถ่านที่จะ 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 หากเสื้อเท่ากับโมฆะแล้วฉันจะเป็นครั้งแรก จะฟรี, หน่วยความจำที่ส่งกลับโดยได้รับ 26 00:01:23,330 --> 00:01:27,120 สตริงและจากนั้นฉันจะไป 1 คืนเพื่อให้มีความหมายว่าข้อผิดพลาด 27 00:01:27,120 --> 00:01:30,360 >> แต่ถ้าทั้งหมดเป็นอย่างดีผมจะดำเนินการต่อไป ที่จะใช้วงสี่และย้ำ 28 00:01:30,360 --> 00:01:31,110 ดังต่อไปนี้ 29 00:01:31,110 --> 00:01:36,000 สำหรับ int ฉันได้รับ 0, n เท่ากับ ความยาวสตริงของ s 30 00:01:36,000 --> 00:01:40,350 ฉันจะทำเช่นนี้ตราบใดที่ฉันเป็น น้อยกว่าหรือเท่ากับ n เพื่อที่ฉัน 31 00:01:40,350 --> 00:01:44,460 ย้ำผ่านและรวมถึง ตัวละครยกเลิกโมฆะใน s 32 00:01:44,460 --> 00:01:47,450 >> และในแต่ละรอบฉัน จะเพิ่มฉัน 33 00:01:47,450 --> 00:01:52,496 ในขณะที่ด้านในของวงนี้คัดลอก s อักขระ i th-เป็นเสื้อของฉัน th- 34 00:01:52,496 --> 00:01:59,310 สถานที่มันพอเพียงที่จะทำเสื้อ วงเล็บที่ฉันได้รับ s วงเล็บฉัน 41 00:01:59,320 --> 00:02:02,750 >> ตอนนี้ขอบันทึกรวบรวมและ รันโปรแกรมใหม่นี้ 42 00:02:02,750 --> 00:02:06,690 ทำสำเนาสำเนา 1 จุดเฉือน 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