5
ฟังก์ชั่นการส่งคืนสตริงสไตล์ที่ดี?
ในโปรแกรม C ของฉันฉันมักต้องการวิธีในการสร้างการแสดงสตริงของ ADT ของฉัน แม้ว่าฉันไม่จำเป็นต้องพิมพ์สตริงไปที่หน้าจอ แต่อย่างใดมันก็เรียบร้อยที่จะมีวิธีการดังกล่าวสำหรับการดีบั๊ก ฟังก์ชันประเภทนี้มักเกิดขึ้น char * mytype_to_string( const mytype_t *t ); ฉันรู้จริงว่าฉันมี (อย่างน้อย) สามตัวเลือกที่นี่เพื่อจัดการหน่วยความจำสำหรับสตริงที่จะกลับมา ทางเลือก 1: การจัดเก็บสตริงส่งคืนในอาร์เรย์ char แบบคงที่ในฟังก์ชัน ฉันไม่ต้องการคิดมากนักยกเว้นว่าสตริงนั้นจะถูกเขียนทับทุกครั้งที่โทร ซึ่งอาจเป็นปัญหาในบางโอกาส ทางเลือกที่ 2: จัดสรรสตริงบนฮีพด้วย malloc ภายในฟังก์ชัน เรียบร้อยจริงๆตั้งแต่ฉันไม่ต้องคิดขนาดของบัฟเฟอร์หรือการเขียนทับ อย่างไรก็ตามฉันต้องจำให้ฟรี () สตริงเมื่อทำแล้วฉันยังต้องกำหนดให้กับตัวแปรชั่วคราวเช่นที่ฉันสามารถฟรี แล้วการจัดสรรฮีปจะช้ากว่าการจัดสรรสแต็คมากจริงๆดังนั้นจึงเป็นคอขวดถ้าทำซ้ำในลูป ทางเลือก 3: ส่งผ่านตัวชี้ไปยังบัฟเฟอร์และให้ผู้เรียกจัดสรรบัฟเฟอร์นั้น ชอบ: char * mytype_to_string( const mytype_t *mt, char *buf, size_t buflen ); …