Memmove() ใน C และ C++

Memmove Ni C Laea C



วันนี้เราจะมาเรียนรู้ฟังก์ชันที่สำคัญอย่างหนึ่งของภาษา C และ C++ ซึ่งก็คือฟังก์ชัน memmove() แต่ก่อนหน้านั้น เรามาดูพื้นฐานของภาษา C และ C++ กันก่อน นอกจากนี้ เราจะหารือเกี่ยวกับฟังก์ชันที่มีอยู่ในภาษา C/C++ ทั้งสองภาษา

ภาษาโปรแกรม C นั้นง่ายและมีประสิทธิภาพสำหรับทุกวัตถุประสงค์ การใช้งานซอฟต์แวร์เช่น Windows OS, ฐานข้อมูล, Interpreters และเครื่องมืออื่น ๆ เป็นไปได้ด้วย C เป็นภาษาที่ยอดเยี่ยมสำหรับผู้เริ่มต้นในการเรียนรู้การเข้ารหัสด้วย นั่นเป็นเหตุผลที่การเขียนโปรแกรม C เรียกว่าภาษาแม่เนื่องจากทำหน้าที่เป็นรากฐานสำหรับภาษาคอมพิวเตอร์อื่น ๆ ทั้งหมด รากฐานของภาษาโปรแกรม C++ ขึ้นอยู่กับแนวคิดของการเขียนโปรแกรมเชิงวัตถุ (OOP) ผู้ใช้สามารถพัฒนาและเข้าใจหลักการของโปรแกรมได้ง่าย เนื่องจาก C++ มีโครงสร้างที่ชัดเจน ภาษาโปรแกรม C\C++ มีความหลากหลายเป็นพิเศษในการทำงานหลายฟังก์ชันและสลับตัวแปรจากประเภทหนึ่งไปเป็นอีกประเภทหนึ่ง ฟังก์ชัน memmove() เป็นหนึ่งในฟังก์ชันของ C/C++







ฟังก์ชัน memmove() ถ่ายโอนไบต์ 'num' พร้อมกันจากเนื้อหาของบล็อกหน่วยความจำซึ่งระบุโดยต้นทางไปยังตำแหน่งที่ระบุโดยปลายทาง ฟังก์ชัน memmove() มีประโยชน์ก็ต่อเมื่อวัตถุต้นทางและปลายทางซ้อนทับกัน และหยุดการทำงานที่ไม่ได้กำหนดไม่ให้เกิดขึ้น หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับฟังก์ชัน memmove() มาเจาะลึกและดูวิธีใช้ไวยากรณ์และตัวอย่างในฟังก์ชัน memmove()



ไวยากรณ์:

นี่คือรูปแบบการเขียนเดียวกันและการใช้ฟังก์ชัน memmove() สำหรับทั้งภาษา C และ C++ ขั้นแรก เราเขียนคีย์เวิร์ด “void” ซึ่งหมายความว่าหากฟังก์ชันไม่คืนค่าใดๆ ให้เขียนชื่อฟังก์ชันที่เราต้องการนำไปใช้ ซึ่งก็คือฟังก์ชัน memmove() ในวงเล็บฟังก์ชัน เราเขียนปลายทางเพื่อให้เราสามารถวางไบต์ 'num' ด้วยคีย์เวิร์ด 'void' จากนั้นเราเขียนตำแหน่งต้นทางที่เราได้รับ 'จำนวน' ไบต์







พารามิเตอร์:

มือ: ที่อยู่ไปยังตำแหน่งที่เก็บข้อมูลที่คัดลอกข้อมูล

src: ที่อยู่ไปยังตำแหน่งที่เก็บข้อมูลที่คัดลอกข้อมูล



นับ: จำนวนข้อมูลที่จะคัดลอกจากต้นทางไปยังปลายทาง

มูลค่าส่งคืน:

ในทางกลับกัน เราได้รับที่อยู่ไปยังพื้นที่หน่วยความจำเป้าหมาย ปลายทางถูกส่งกลับโดยฟังก์ชัน memmove()

ตัวอย่างที่ 1: การใช้งานฟังก์ชัน Memmove() ในภาษาซี

เรามาเริ่มใช้ตัวอย่างแรกและง่ายของภาษา C กัน ในการเริ่มต้นเขียน เราต้องมีคอมไพเลอร์ภาษาซีก่อนจึงจะเขียนและรันโปรแกรมได้ เปิดคอมไพเลอร์ C และเริ่มใช้งานโปรแกรม

#รวม
#รวม

int หลัก ( )
{
ถ่าน ch1 [ ] = { 'ล' , 'ผม' , 'n' , 'ใน' , 'x' } ;

ความยาว int = ขนาดของ ( ch1 ) / ขนาดของ ( ch1 [ 0 ] ) ;

พิมพ์ฉ ( 'ก่อนใช้ฟังก์ชัน memmove(): ' ) ;
สำหรับ ( นานาชาติ ผม = 0 ; ผม < ความยาว; ฉัน ++ )
{
พิมพ์ฉ ( '%ค' , ch1 [ ผม ] ) ;
}

ถ่าน * ch2 = & ch1 [ สอง ] ;
บันทึก ( ch2, ch1, ขนาดของ ( ถ่าน ) * สอง ) ;

พิมพ์ฉ ( ' \n \n หลังจากใช้ฟังก์ชัน memmove() แล้ว: ' ) ;

สำหรับ ( นานาชาติ ผม = 0 ; ผม < 5 ; ฉัน ++ )
{
พิมพ์ฉ ( '%ค ' , ch1 [ ผม ] ) ;
}
กลับ 0 ;

}


เราเริ่มต้นด้วยการรวมโมดูลโปรแกรมหลักเสมอหลังจากเริ่มคอมไพเลอร์ โมดูลเหล่านี้เป็นโมดูลภาษา C ที่ให้มา เราแค่ต้องพิมพ์โค้ดหนึ่งบรรทัดเพื่อรวมโมดูลเหล่านี้ แทนที่จะพิมพ์โค้ดหลายสิบบรรทัดเพื่อสร้างโมดูล ตัวบ่งชี้ “#” แจ้งให้นักแปลโหลดโมดูลก่อนใช้คีย์เวิร์ด “include” เพื่อเพิ่มโมดูลในโปรแกรม โมดูล 'stdio.h' หมายความว่าคอมไพเลอร์ยอมรับข้อมูลจากผู้ใช้และแสดงให้ผู้ใช้เห็น โมดูลที่สองของโปรแกรมคือ “#include ” เพื่อให้เราสามารถใช้ฟังก์ชันที่เกี่ยวข้องกับสตริงในโปรแกรมที่มีอยู่

จากนั้นเราเริ่มฟังก์ชั่น main() เพื่อให้เราสามารถเขียนบรรทัดรหัสจริงที่เราต้องการนำไปใช้ในโปรแกรม ในบรรทัดที่ 6 เราประกาศชื่ออาร์เรย์อักขระ 'ch1' ของอักขระประเภท จากนั้นเรากำหนดค่าอักขระให้กับมัน หลังจากนั้น เราคำนวณความยาวของ 'ch1' และพิมพ์อาร์เรย์อินพุต 'ch1' โดยใช้ 'for loop'

หลังจากนั้นเราจะประกาศตัวชี้ไปที่อาร์เรย์ 'ch2' ของอักขระประเภทและกำหนดที่อยู่ของอาร์เรย์ 'ch1' ให้กับอาร์เรย์ 'ch2' จากนั้นพิมพ์โดยใช้คำสั่ง printf() มาดูผลลัพธ์ของภาพประกอบก่อนหน้านี้:

ตัวอย่างที่ 2: การใช้งานฟังก์ชัน Memmove() ใน C++

นี่คือตัวอย่างพื้นฐานที่แสดงการทำงานของฟังก์ชัน memmove() ในภาษา C++ ในการเริ่มต้นเขียน เราต้องมี C++ IDE ก่อนจึงจะเขียนและรันโปรแกรมได้ สำหรับสิ่งนั้น ให้เปิดคอมไพเลอร์ C++ และเริ่มใช้งานโปรแกรม

หลังจากเปิดคอมไพเลอร์แล้ว เราจะเริ่มโดยรวมไฟล์ส่วนหัวที่จำเป็นสำหรับภาษาโปรแกรม C++ เพื่อให้โปรแกรมทำงานเสมอ ในการสร้างโปรแกรมและใช้เมธอด memmove() ก่อนอื่นเราต้องรวมไฟล์ส่วนหัวพื้นฐานสองไฟล์ ได้แก่ “iostream” และ “cstring” C++ มีหลายวิธีในการทำงานกับอาร์เรย์และสตริง ฟังก์ชันเหล่านี้พร้อมใช้งานเมื่อรวมไฟล์ส่วนหัวไว้ในโปรแกรมที่มีไฟล์ส่วนหัว “#include  ” ซึ่งใช้สำหรับคัดลอกข้อมูลจำนวนหนึ่งไบต์จากต้นทางไปยังปลายทาง ไฟล์ส่วนหัว “#include ” ใช้สำหรับทั้งอินพุตและเอาต์พุตของข้อมูลจากผู้ใช้ จากนั้น เราใช้มาตรฐาน “namespace std” ในโค้ดของเราเพื่อใช้ไวยากรณ์มาตรฐานของภาษาโปรแกรม C++ เพื่อให้เราสามารถป้องกันไม่ให้ออบเจกต์ เมธอด และพารามิเตอร์อ้างอิงขอบเขตเดียวกันตลอดทั้งโปรแกรม

#รวมถึง
#รวม
ใช้เนมสเปซ std;

int หลัก ( )
{
ถ่าน src [ ห้าสิบ ] = '1234567890' ;
ปลายทางถ่าน [ ห้าสิบ ] = '0987654321' ;

ศาล << 'ก่อนสมัคร memove ไปยังปลายทาง: ' << เริ่ม << ท้าย;
บันทึก ( ปลายทาง, src, 6 ) ;
ศาล << 'หลังจากสมัคร memove ไปยังปลายทาง: ' << มือ

กลับ 0 ;
}


เราเริ่มเขียนฟังก์ชัน main() เพื่อเริ่มดำเนินการตามบรรทัดของโค้ดจริง ในบรรทัดที่ 7 มีอาร์เรย์ประเภทสองอักขระที่มีความยาว 50 ซึ่งประกาศเป็น “src[50]” และ “dest[50]” เราใช้คำสั่ง “cout” เพื่อพิมพ์ข้อความ “ก่อนใช้ memmove() กับปลายทาง: ” จากนั้นเราจะส่งพารามิเตอร์ 'dest' เพื่อพิมพ์ค่าของอาร์เรย์ 'dest' จากนั้น ฟังก์ชัน memmove() ถูกนำไปใช้กับตัวแปรประเภทอักขระที่ประกาศเป็น “src[50]” และ “dest[50]” เพื่อซ้อนทับจำนวนไบต์ที่กำหนดจากจุดเริ่มต้น (src) ไปยังเป้าหมาย (ปลายทาง) ด้วย จำนวนของ 'นับ' ค่านี้ระบุจำนวนไบต์ที่คัดลอกจาก 'src' ไปยัง 'dest' ดังที่คุณเห็นในภาพประกอบต่อไปนี้ เราประกาศจำนวนนับ '6'

หลังจากนั้น เราใช้คำสั่ง “cout” อีกครั้งเพื่อแสดงข้อความ “หลังจากใช้ memmove() กับปลายทาง: ” และส่งตัวแปรอาร์เรย์ “dest” ของประเภท “ตัวอักษร” ในการหยุดการทำงานของโปรแกรม เราต้องใช้คำสั่ง return ที่บทสรุปของโปรแกรม จากนั้นเราจะคืนค่า 0 เป็นฟังก์ชันหลัก ซึ่งแสดงว่าโปรแกรมทำงานสำเร็จและบรรลุวัตถุประสงค์

คุณสามารถดูผลลัพธ์ต่อไปนี้ของเมธอด memmove() ว่าหากมีการทับซ้อนกัน ตัวอย่างเช่น เมื่อตัวชี้เริ่มต้นเลื่อนไปที่ตัวอักษร 6 ตัวชี้จะพิมพ์ต่อไปและอักขระต่อไปนี้จะทับซ้อนกัน ข้อมูลโค้ด C++ นี้ถูกเรียกใช้และผลลัพธ์จะแสดงในรูปต่อไปนี้:

บทสรุป

ในบทความนี้ เราได้เรียนรู้เกี่ยวกับฟังก์ชัน memmove() ในภาษาโปรแกรม C และ C++ เราได้พูดคุยเกี่ยวกับวิธีการทำงานของฟังก์ชัน memmove() ผ่านตัวอย่างภาษา C และ C++ พร้อมคำอธิบายโดยละเอียดของโค้ดทุกบรรทัด เราหวังว่าบทความนี้จะเป็นประโยชน์ในการพัฒนาความรู้ของคุณเกี่ยวกับฟังก์ชัน memmove() ใน C และ C++