Menu
Coddy logo textTech

שימוש ב־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, ומאפשרת לך לשכפל מחרוזות, לאתחל משתני מחרוזת עם תוכן קיים ולהכין מחרוזות לעיבוד נוסף.

challenge icon

אתגר

קל

כתבו תוכנית ב־C שמדגימה העתקת מחרוזות באמצעות הפונקציה strcpy(). התוכנית שלכם צריכה:

  1. לקרוא מספר שלם n שמייצג את מספר פעולות המחרוזת שיש לבצע
  2. עבור כל פעולה:
    • לקרוא מחרוזת מקור מהקלט
    • להכריז על מערך תווים בשם destination ובו 100 איברים
    • להשתמש ב־strcpy() כדי להעתיק את מחרוזת המקור אל מערך היעד
    • להדפיס הן את מחרוזת המקור המקורית והן את מחרוזת היעד שהועתקה
  3. לאחר כל הפעולות, להדגים שהמחרוזות שהועתקו אינן תלויות במקורות שלהן, באמצעות:
    • שינוי התו הראשון במערך היעד האחרון ל־'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;
}
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה לוגיקה וזרימת תוכנית

תרגלו בעצמכם: קומפיילר C אונליין