memset()
จะถูกประกาศให้ส่งคืนvoid*
ซึ่งเป็นค่าเดียวกับที่อยู่ที่ส่งผ่านไปยังฟังก์ชันเสมอ
การใช้คืนมูลค่าคืออะไร? ทำไมมันไม่กลับมาvoid
?
memset()
จะถูกประกาศให้ส่งคืนvoid*
ซึ่งเป็นค่าเดียวกับที่อยู่ที่ส่งผ่านไปยังฟังก์ชันเสมอ
การใช้คืนมูลค่าคืออะไร? ทำไมมันไม่กลับมาvoid
?
strcat()
คืออะไร? บางครั้งฟังก์ชันมาตรฐานคือสิ่งที่ระบุไว้ไม่ใช่สิ่งที่ควรเป็น
คำตอบ:
ลายเซ็นสอดคล้องกับฟังก์ชันอื่น ๆ ที่คล้ายกันทั้งหมด: memcpy()
,strcpy()
ฯลฯ ผมคิดเสมอว่านี้คือทำเพื่อเปิดใช้งานหนึ่งไปยังสายโซ่ฟังก์ชั่นดังกล่าวและจะเป็นอย่างอื่นใช้สายดังกล่าวในการแสดงออก
ที่กล่าวว่าฉันไม่เคยเจอสถานการณ์ในโลกแห่งความเป็นจริงที่ฉันรู้สึกว่าถูกบังคับให้ใช้มูลค่าผลตอบแทนในลักษณะนี้
อาจใช้สำหรับการผูกมัดการโทรเช่น:
char a[200];
strcpy(memset(a, 0, 200), "bla");
strcpy
กลับกันสำหรับการส่งกลับตัวชี้ผ่านตัวสุดท้ายที่คัดลอก memset(my_strcpy(a, "bla"), 0, a + 200);
(ชอบstd::copy_n
และstd::fill_n
ทำใน C ++)
เพื่อใช้ฟังก์ชันเป็นอาร์กิวเมนต์สำหรับฟังก์ชันอื่นเช่น sprintf
ฉันเจอคำถามนี้เมื่อ Googling เพื่อดูว่า memset ส่งคืนอะไรบ้าง
ฉันมีรหัสบางอย่างที่ฉันทดสอบสำหรับค่าหนึ่งถ้านั่นเป็นการทดสอบจริงเพื่อดูว่าค่าเป็นศูนย์หรือไม่
เนื่องจากไม่มีวิธีพกพาอย่างสมบูรณ์ใน C เพื่อทดสอบค่าศูนย์ฉันจึงต้องเรียกใช้ memset ที่อยู่ตรงกลาง
ดังนั้นรหัสของฉันคือ:
if ( a==true && (memcmp(memset(zeros, 0, sizeof(zeros)), b, sizeof(zeros)) == 0) )
สิ่งนี้พูดถึงจุดประสงค์การผูกมัดที่ระบุไว้ในคำถามก่อนหน้านี้ แต่เป็นตัวอย่างของการใช้เทคนิคนี้
ฉันจะปล่อยให้คนอื่นตัดสินว่านี่เป็นการเข้ารหัสที่ดีหรือไม่