1 00:00:00,000 --> 00:00:00,340 2 00:00:00,340 --> 00:00:01,960 >> ลำโพง 1: ตอนนี้ขอให้แก้ไข โปรแกรมสุดท้ายที่ 3 00:00:01,960 --> 00:00:04,920 และในครั้งนี้เราจะมาจัดสรรอย่างชัดเจน หน่วยความจำบางส่วนที่ 4 00:00:04,920 --> 00:00:06,550 ข้อมูลของผู้ใช้จะถูกเก็บไว้ 5 00:00:06,550 --> 00:00:09,600 ต้องการทำเช่นนั้นให้เหลาในที่แรก บรรทัดของรหัสที่เราประกาศ s 6 00:00:09,600 --> 00:00:11,590 ก่อนหน้านี้จะเป็นดาราถ่าน 7 00:00:11,590 --> 00:00:14,210 คราวนี้เราจะมาประกาศอีกครั้ง ดังนี้ - 8 00:00:14,210 --> 00:00:19,380 ถ่าน s วงเล็บ 16 ตัวอย่างเช่น วงเล็บปิด 9 00:00:19,380 --> 00:00:23,690 >> ในคำอื่น ๆ ขอประกาศที่จะไม่มี อีกต่อไปจะเป็นที่อยู่ของตัวละคร, 10 00:00:23,690 --> 00:00:26,610 แต่อาเรย์ของ 16 ตัวอักษร 11 00:00:26,610 --> 00:00:30,295 วิธีนี้ผู้ใช้สามารถพิมพ์ได้ถึง 15 ตัวอักษรและยังคงออกจากห้องพักสำหรับ 12 00:00:30,295 --> 00:00:31,570 เทอร์มิ null 13 00:00:31,570 --> 00:00:35,870 ให้ดำเนินการต่อไปบันทึกรวบรวม, และเรียกใช้โปรแกรมนี้ 14 00:00:35,870 --> 00:00:40,770 ทำให้ scanf2 จุดเฉือน scanf2 15 00:00:40,770 --> 00:00:45,100 ตอนนี้ขอให้พิมพ์สตริงเช่นสวัสดี และเรากำลังเพื่อขอบคุณสวัสดี 16 00:00:45,100 --> 00:00:46,440 >> ขณะนี้ยังคงมีปัญหา 17 00:00:46,440 --> 00:00:50,140 ฉันมีเพียงแค่พิมพ์ในสวัสดีซึ่งเป็นเพียง ห้าตัวอักษรบวก 1 สำหรับโมฆะ 18 00:00:50,140 --> 00:00:50,445 Terminator 19 00:00:50,445 --> 00:00:53,610 มันทำให้เรามีเพียง จำเป็นที่จะต้องหกไบต์ 20 00:00:53,610 --> 00:00:56,740 >> แต่น่าเสียดายที่เราเท่านั้น 16 การจัดสรรทั้งหมด 21 00:00:56,740 --> 00:01:01,305 ดังนั้นหากผู้ใช้จริงในประเภท 16 ตัวอักขระหรือ 17 หรือหลายร้อย 22 00:01:01,305 --> 00:01:04,410 ตัวละครเราก็ยังคงไม่ได้ไป มีห้องพักเพียงพอในหน่วยความจำสำหรับ 23 00:01:04,410 --> 00:01:05,400 ข้อมูลของผู้ใช้ 24 00:01:05,400 --> 00:01:07,750 และในความเป็นจริงนี้เป็นสิ่งที่ทำให้ ได้รับข้อมูลจากผู้ใช้เพื่อให้ 25 00:01:07,750 --> 00:01:08,940 ยากโดยทั่วไป 26 00:01:08,940 --> 00:01:12,270 และแน่นอนนี่คือเหตุผลที่เราดำเนินการ ฟังก์ชั่นสตริงได้รับในครั้งแรก 27 00:01:12,270 --> 00:01:13,900 สถานที่ในห้องสมุด CS50 - 28 00:01:13,900 --> 00:01:16,900 ที่จะคิดออกวิธีการจัดการที่ สถานการณ์ที่ผู้ใช้ใน 29 00:01:16,900 --> 00:01:19,710 ตัวอักษรมากกว่าที่เรา ที่คาดการณ์ไว้ในตอนแรก 30 00:01:19,710 --> 00:01:21,750 >> ตรงไปตรงมาไม่สมบูรณ์ การเขียนโปรแกรมนี้ 31 00:01:21,750 --> 00:01:23,290 ไม่มีการแก้ปัญหาการทำความสะอาด 32 00:01:23,290 --> 00:01:26,970 แต่สิ่งที่เราจะต้องทำคือการได้รับ ตัวอักษรจากผู้ใช้ที่หนึ่ง 33 00:01:26,970 --> 00:01:28,860 เวลาอีกครั้งและอีกครั้ง 34 00:01:28,860 --> 00:01:32,510 และในแต่ละจุดถ้าเราตระหนักดีว่าเรากำลัง ออกจากหน่วยความจำที่เราจะต้องไปที่ 35 00:01:32,510 --> 00:01:36,450 จุดที่กลับไปในการจัดสรร หน่วยความจำเพิ่มเติมบางส่วนคัดลอกของผู้ใช้ 36 00:01:36,450 --> 00:01:39,400 นำเข้าก่อนหน้านี้จากก้อนแรกของเรา ของหน่วยความจำเข้าไปใหม่ 37 00:01:39,400 --> 00:01:40,810 ก้อนขนาดใหญ่ของหน่วยความจำ 38 00:01:40,810 --> 00:01:44,610 แล้วทำซ้ำขั้นตอนที่อีกครั้งและ อีกครั้งจนกว่าผู้ใช้จะกระทำให้ 39 00:01:44,610 --> 00:01:45,860 ข้อมูลของเขาหรือเธอ 40 00:01:45,860 --> 00:01:48,246