שימוש ב־strcpy()
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-C של Coddy. שיעור 16 מתוך 63.
למדת איך למצוא את האורך של מחרוזות באמצעות strlen(), אבל מה אם צריך להעתיק את התוכן של מחרוזת אחת לאחרת? ב־C, אי אפשר להשתמש באופרטור ההשמה (=) כדי להעתיק מחרוזות כפי שהיית עושה עם משתנים רגילים.
הסיבה היא שמחרוזות הן מערכי תווים, וכשמשתמשים ב-= עם מערכים, מעתיקים רק את כתובת הזיכרון ולא את התוכן עצמו. כאן נכנסת לתמונה הפונקציה strcpy() מהספרייה <string.h>.
#include <stdio.h>
#include <string.h>
char source[] = "Hello";
char destination[20];
strcpy(destination, source); // מעתיק את "Hello" אל destinationהפונקציה strcpy() מקבלת שני ארגומנטים: מערך היעד (שאליו רוצים להעתיק) ומחרוזת המקור (מה שרוצים להעתיק). היא מעתיקה כל תו מהמקור ליעד, כולל התו המסיים null.
חשוב שמערך היעד שלך יהיה גדול מספיק כדי להכיל את מחרוזת המקור כולה ואת התו המסיים null. אם היעד קטן מדי, strcpy() יכתוב מעבר לגבולות המערך, ויגרום להתנהגות לא מוגדרת.
הפונקציה הזאת חיונית למניפולציה של מחרוזות ב-C, ומאפשרת לך לשכפל מחרוזות, לאתחל משתני מחרוזת עם תוכן קיים ולהכין מחרוזות לעיבוד נוסף.
אתגר
קלכתבו תוכנית ב־C שמדגימה העתקת מחרוזות באמצעות הפונקציה strcpy(). התוכנית שלכם צריכה:
- לקרוא מספר שלם
nשמייצג את מספר פעולות המחרוזת שיש לבצע - עבור כל פעולה:
- לקרוא מחרוזת מקור מהקלט
- להכריז על מערך תווים בשם
destinationובו 100 איברים - להשתמש ב־
strcpy()כדי להעתיק את מחרוזת המקור אל מערך היעד - להדפיס הן את מחרוזת המקור המקורית והן את מחרוזת היעד שהועתקה
- לאחר כל הפעולות, להדגים שהמחרוזות שהועתקו אינן תלויות במקורות שלהן, באמצעות:
- שינוי התו הראשון במערך היעד האחרון ל־'X'
- הדפסת מחרוזת היעד ששונתה כדי להראות שהיא השתנתה
זכרו לכלול את הכותרת <string.h> כדי להשתמש בפונקציה strcpy().
הפלט שלכם צריך להציג את התוצאות בפורמט הבא:
Source: [source_string]
Destination: [copied_string]
Source: [source_string]
Destination: [copied_string]
...
Modified last destination: [modified_string]לדוגמה, אם הקלט הוא:
3
hello
world
programmingהפלט שלכם צריך להיות:
Source: hello
Destination: hello
Source: world
Destination: world
Source: programming
Destination: programming
Modified last destination: Xrogrammingהאתגר הזה בוחן את ההבנה שלכם בשימוש ב־strcpy() כדי להעתיק תוכן של מחרוזת ממערך תווים אחד לאחר, בהקצאת זיכרון מתאימה למערכי היעד, ומדגים שהמחרוזות שהועתקו אינן תלויות במקורות שלהן.
נסו בעצמכם
#include <stdio.h>
#include <string.h>
int main() {
int n;
scanf("%d", &n);
char source[100];
char destination[100];
// TODO: כתבו את הקוד שלכם כאן
// השתמשו בלולאה כדי לעבד n פעולות על מחרוזות
// לכל פעולה:
// - קראו את מחרוזת המקור
// - השתמשו ב-strcpy() כדי להעתיק את source אל destination
// - הדפיסו את שתי המחרוזות בפורמט הנדרש
// TODO: לאחר הלולאה, שנו את התו הראשון של destination האחרון
// והדפיסו את המחרוזת לאחר השינוי
return 0;
}השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת תוכנית
1יסודות המצביעים
מהו מצביע?הכרזה על מצביעיםאופרטור לקיחת הכתובת (&)אופרטור ביטול ההפניה (*)מצביעי NULLסיכום: יסודות המצביעים2מצביעים ומערכים
שמות מערכים כמצביעיםאיברי מערך ומצביעיםאריתמטיקה של מצביעיםהשוואת מצביעיםסיכום: מעבר על מערך באמצעות מצביעים5מצביעים ופונקציות
העברה לפי ערךהעברת מצביעים לפונקציותשינוי משתנים באמצעות מצביעיםדוגמה קלאסית: החלפההעברת מערכים לפונקציותחזרה: ארגומנטים של מצביעי פונקציה3מערכי תווים ומחרוזות
מחרוזות כמערכי charתו הסיום nullקלט מחרוזת באמצעות scanfשימוש ב־strlen()שימוש ב־strcpy()שימוש ב־strcat()שימוש ב־strcmp()סיכום: פונקציות מחרוזת בסיסיותתרגלו בעצמכם: קומפיילר C אונליין