Memmove() ב-C ו-C++

Memmove B C W C



היום, אנו הולכים ללמוד את אחת הפונקציות החשובות של שפת C ו-C++ שהיא הפונקציה memmove() . אבל לפני כן, בואו נסתכל במהירות על היסודות של שפות C ו-C++. נדון גם באילו פונקציות יש בשתי שפות C/C++.

שפת התכנות C קלה ויעילה למדי לכל המטרות. אפשר באמצעותה יישום של תוכנות כמו מערכת ההפעלה Windows, מסדי נתונים, מתורגמנים וכלים נוספים. C היא שפה נהדרת למתחילים ללמוד איתה את הקידוד. זו הסיבה שתכנות C ידועה כשפת האם מכיוון שהיא משמשת כבסיס לכל שאר שפות המחשב. הבסיס של שפת התכנות C++ מבוסס על הרעיונות של תכנות מונחה עצמים (OOP). המשתמש יכול לפתח ולהבין את עקרונות התוכנית בקלות שכן ל-C++ יש מבנה ברור. שפת התכנות C\C++ היא צדדית במיוחד בביצוע פונקציות מרובות והחלפת משתנה מסוג אחד לאחר. הפונקציה memmove() היא אחת מהפונקציות של C/C++.







הפונקציה memmove() מעבירה 'num' בתים בו-זמנית מהתוכן של בלוק הזיכרון אשר מצוין על ידי המקור לעבר המיקום המצוין על ידי היעד. הפונקציה memmove() מועילה רק כאשר אובייקטי המקור והיעד חופפים ועוצרת את התרחשות ההתנהגות הלא מוגדרת. כדי ללמוד עוד על הפונקציה memmove(), בואו נחפור לעומק ונראה כיצד ליישם את התחביר והדוגמאות בפונקציה memmove() .



תחביר:

הנה אותו סגנון כתיבה והטמעה של הפונקציה memmove() עבור שפות C ו-C++. ראשית, נכתוב את מילת המפתח 'void' שמשמעותה שאם הפונקציה לא מחזירה שום ערך, נכתוב את שם הפונקציה שאנו רוצים ליישם שהיא הפונקציה memmove() . בסוגריים של הפונקציות, נכתוב את היעד כדי שנוכל למקם את ה-'num' בתים עם מילת המפתח 'void'. לאחר מכן, אנו כותבים את מיקום המקור ממנו אנו מקבלים את ה-'num' בתים.







פרמטרים:

יד: כתובת למיקום האחסון בו מועתקים הנתונים.

src: כתובת למיקום האחסון ממנו מועתקים הנתונים.



לספור: כמות הנתונים להעתקה ממקור ליעד.

ערך החזרה:

בתמורה, אנו מקבלים את הכתובת לאזור זיכרון היעד. Dest מוחזר על ידי הפונקציה memmove() .

דוגמה 1: יישום של פונקציית Memmove() ב-C

בואו נתחיל ליישם את הדוגמה הראשונה והפשוטה שלנו לשפת C. כדי להתחיל לכתוב, אנחנו צריכים קודם כל מהדר C כדי שנוכל לכתוב ולהפעיל את התוכנית. לשם כך, פתח את המהדר C והתחל ליישם את התוכנית.

#include
#include

int main ( )
{
char ch1 [ ] = { 'ל' , 'אני' , 'נ' , 'ב' , 'איקס' } ;

int length = sizeof ( ch1 ) / מידה של ( ch1 [ 0 ] ) ;

printf ( 'לפני החלת הפונקציה memmove(): ' ) ;
ל ( int אני = 0 ; אני < אורך; i++ )
{
printf ( '%c' , ch1 [ אני ] ) ;
}

לְהַשְׁחִיר * ch2 = & ch1 [ שתיים ] ;
memmove ( ch2, ch1, sizeof ( לְהַשְׁחִיר ) * שתיים ) ;

printf ( ' \n \n לאחר החלת הפונקציה memmove(): ' ) ;

ל ( int אני = 0 ; אני < 5 ; i++ )
{
printf ( '%c' , ch1 [ אני ] ) ;
}
לַחֲזוֹר 0 ;

}


אנו תמיד מתחילים בשילוב מודולי תוכנית הליבה לאחר הפעלת המהדר. מודולים אלה הם מודולי שפת C המצורפים. אנחנו פשוט צריכים להקליד שורת קוד אחת כדי לכלול את המודולים האלה, בניגוד לעשרות שורות קוד כדי לבנות את המודול. המחוון '#' מודיע למתרגם לטעון תחילה את המודול לפני השימוש במילת המפתח 'כלול' כדי להוסיף את המודול לתוכנית. מודול 'stdio.h' אומר שהמהדר מקבל את הנתונים מהמשתמש ומראה אותם למשתמש. המודול השני של התוכנית הוא '#include ' כך שנוכל להשתמש בפונקציות הקשורות למחרוזת בתוכנית הקיימת.

לאחר מכן, אנו מתחילים את הפונקציה main() כדי שנוכל לכתוב את שורת הקוד האמיתית שאנו רוצים ליישם בתוכנית. בשורה 6, אנו מכריזים על שם מערך התווים 'ch1' מסוג תו. לאחר מכן, אנו מקצים לו ערך תו. לאחר מכן, אנו מחשבים את אורך ה-'ch1' ומדפיסים את מערך הקלט 'ch1' באמצעות ה-'for loop'.

לאחר מכן, אנו מכריזים על המצביע למערך 'ch2' של תו סוג ומקצים את הכתובת של מערך 'ch1' למערך 'ch2'. לאחר מכן, אנו מדפיסים אותו באמצעות ההצהרה printf() . בוא נראה את הפלט של האיור הקודם:

דוגמה 2: יישום של פונקציית Memmove() ב-C++

הנה הדוגמה הבסיסית שמראה כיצד פועלת הפונקציה memmove() בשפת C++. כדי להתחיל לכתוב, אנחנו צריכים תחילה C++ IDE כדי שנוכל לכתוב ולהפעיל את התוכנית. לשם כך, פתח את המהדר C++ והתחל ליישם את התוכנית.

לאחר פתיחת המהדר, אנו תמיד מתחילים בהכללת קבצי ה-header הנחוצים לשפת התכנות C++ להפעלת התוכניות. כדי לבנות את התוכנית ולהשתמש בשיטת memmove(), אנו כוללים תחילה את שני קבצי הכותרת הבסיסיים - 'iostream' ו-'cstring'. C++ מספק מספר דרכים לעבודה עם מערכים ומחרוזות. פונקציות אלו זמינות לשימוש כאשר קובץ הכותרת נכלל בתוכנית עם קובץ הכותרת '#include  ' המשמש להעתקת מספר מסוים של בתים של נתונים מהמקור ליעד. קובץ הכותרת '#include ' משמש הן לקלט והן לפלט של הנתונים מהמשתמש. לאחר מכן, אנו משתמשים ב-'Namespace std' הסטנדרטי בקוד שלנו כדי להשתמש בתחביר הסטנדרטי של שפת התכנות C++ כדי שנוכל למנוע מהאובייקטים, השיטות והפרמטרים להפנות לאותו היקף לאורך התוכנית כולה.

#include
#include
שימוש במרחב שמות std;

int main ( )
{
char src [ חמישים ] = '1234567890' ;
char dest [ חמישים ] = '0987654321' ;

cout << 'לפני החלת memmove ליעד: ' << הַתחָלָה << endl;
memmove ( dest, src, 6 ) ;
cout << 'לאחר החלת memmove ליעד: ' << ידיים

לַחֲזוֹר 0 ;
}


אנו מתחילים לכתוב את הפונקציה main() כדי להתחיל בביצוע של שורת קוד בפועל. בשורה 7, קיים מערך מסוג שני תווים באורך 50 המוכרז כ-'src[50]' ו-'dest[50]'. אנו משתמשים בהצהרה 'cout' כדי להדפיס את ההודעה, 'לפני החלת memmove() ליעד: '. לאחר מכן, נעביר את הפרמטר 'dest' כדי להדפיס את הערך של מערך 'dest'. לאחר מכן, הפונקציה memmove() מוחלת על משתנה סוג התווים שהוכרז כ-'src[50]' ו-'dest[50]' כדי לחפוף את המספר המסוים של בתים מהמקור (src) אל המטרה (dest) עם ה- מספר 'ספירה'. זה מזהה את מספר הבתים המועתקים מ-'src' ל-'dest'. כפי שניתן לראות באיור הבא, הכרזנו על מספר ספירת '6'.

לאחר מכן, אנו משתמשים שוב במשפט 'cout' כדי להציג את ההודעה, 'After Applying memmove() to Destination: ', ומעבירים את מערך המשתנה 'dest' מסוג 'character'. כדי לעצור את הפעלת התוכנית, עלינו להשתמש בהצהרת החזרה בסיום התוכנית. לאחר מכן נחזיר 0 לפונקציה הראשית, המציין שהתוכנית בוצעה בהצלחה והשיגה את מטרתה.

ניתן לראות בפלט הבא של שיטת memmove() שאם יש חפיפה, למשל, כאשר המצביע הראשוני עובר לאות 6, המצביע ממשיך להדפיס והתווים הבאים יחפפו. קטע קוד C++ זה הופעל והתוצאות מוצגות בתמונה הבאה:

סיכום

במאמר זה למדנו על הפונקציה memmove() בשפות התכנות C ו-C++. דיברנו על איך הפונקציה memmove() עובדת דרך הדוגמה של C ו-C++ עם הסבר מפורט של כל שורת קוד. אנו מקווים שמאמר זה מועיל בפיתוח הידע שלך לגבי הפונקציה memmove() ב-C ו-C++.