>> ลำโพง 1: ตอนนี้ขอให้แก้ไข โปรแกรมสุดท้ายที่
และในครั้งนี้เราจะมาจัดสรรอย่างชัดเจน หน่วยความจำบางส่วนที่
ข้อมูลของผู้ใช้จะถูกเก็บไว้
ต้องการทำเช่นนั้นให้เหลาในที่แรก บรรทัดของรหัสที่เราประกาศ s
ก่อนหน้านี้จะเป็นดาราถ่าน
คราวนี้เราจะมาประกาศอีกครั้ง ดังนี้ -
ถ่าน s วงเล็บ 16 ตัวอย่างเช่น วงเล็บปิด
>> ในคำอื่น ๆ ขอประกาศที่จะไม่มี อีกต่อไปจะเป็นที่อยู่ของตัวละคร,
แต่อาเรย์ของ 16 ตัวอักษร
วิธีนี้ผู้ใช้สามารถพิมพ์ได้ถึง 15 ตัวอักษรและยังคงออกจากห้องพักสำหรับ
เทอร์มิ null
ให้ดำเนินการต่อไปบันทึกรวบรวม, และเรียกใช้โปรแกรมนี้
ทำให้ scanf2 จุดเฉือน scanf2
ตอนนี้ขอให้พิมพ์สตริงเช่นสวัสดี และเรากำลังเพื่อขอบคุณสวัสดี
>> ขณะนี้ยังคงมีปัญหา
ฉันมีเพียงแค่พิมพ์ในสวัสดีซึ่งเป็นเพียง ห้าตัวอักษรบวก 1 สำหรับโมฆะ
Terminator
มันทำให้เรามีเพียง จำเป็นที่จะต้องหกไบต์
>> แต่น่าเสียดายที่เราเท่านั้น 16 การจัดสรรทั้งหมด
ดังนั้นหากผู้ใช้จริงในประเภท 16 ตัวอักขระหรือ 17 หรือหลายร้อย
ตัวละครเราก็ยังคงไม่ได้ไป มีห้องพักเพียงพอในหน่วยความจำสำหรับ
ข้อมูลของผู้ใช้
และในความเป็นจริงนี้เป็นสิ่งที่ทำให้ ได้รับข้อมูลจากผู้ใช้เพื่อให้
ยากโดยทั่วไป
และแน่นอนนี่คือเหตุผลที่เราดำเนินการ ฟังก์ชั่นสตริงได้รับในครั้งแรก
สถานที่ในห้องสมุด CS50 -
ที่จะคิดออกวิธีการจัดการที่ สถานการณ์ที่ผู้ใช้ใน
ตัวอักษรมากกว่าที่เรา ที่คาดการณ์ไว้ในตอนแรก
>> ตรงไปตรงมาไม่สมบูรณ์ การเขียนโปรแกรมนี้
ไม่มีการแก้ปัญหาการทำความสะอาด
แต่สิ่งที่เราจะต้องทำคือการได้รับ ตัวอักษรจากผู้ใช้ที่หนึ่ง
เวลาอีกครั้งและอีกครั้ง
และในแต่ละจุดถ้าเราตระหนักดีว่าเรากำลัง ออกจากหน่วยความจำที่เราจะต้องไปที่
จุดที่กลับไปในการจัดสรร หน่วยความจำเพิ่มเติมบางส่วนคัดลอกของผู้ใช้
นำเข้าก่อนหน้านี้จากก้อนแรกของเรา ของหน่วยความจำเข้าไปใหม่
ก้อนขนาดใหญ่ของหน่วยความจำ
แล้วทำซ้ำขั้นตอนที่อีกครั้งและ อีกครั้งจนกว่าผู้ใช้จะกระทำให้
ข้อมูลของเขาหรือเธอ