4.2 מחרוזות הרצאה

הפונקציה strcat מחברת את המחרוזת השנייה לסוף הראשונה. יש לוודא שהמחרוזת הראשונה (dest) גדולה מספיק כדי להכיל את שתי המחרוזות יחד. תו הסיום '\0' מתעדכן אוטומטית.

char str1[100] = "שלום ";
char str2[] = "עולם";
strcat(str1, str2);
// str1 עכשיו מכילה: "שלום עולם"

שימוש לא זהיר עלול לגרום לחריגה מהזיכרון אם str1 לא מספיק גדולה.


הפונקציה strchr מחפשת תו בתוך מחרוזת, ומחזירה מצביע למיקום הראשון שבו התו מופיע. אם התו לא נמצא – מוחזר NULL.

char *text = "hello";
char *p = strchr(text, 'l');
// p יצביע ל־'l' הראשון, כלומר text + 2

אפשר גם לבדוק אם תו קיים:

if (strchr(text, 'x') == NULL) {
    printf("התו לא נמצא\n");
}

הפונקציה strstr מחפשת תת־מחרוזת בתוך מחרוזת אחרת, ומחזירה מצביע למיקום שבו היא מתחילה. אם לא נמצאה – מוחזר NULL.

char *text = "this is a test";
char *found = strstr(text, "is");
// found יצביע ל־"is a test"

שימושי מאוד לבדיקת תוכן או מימוש פונקציות חיפוש בסיסיות.


הפונקציה strncmp משווה בין שתי מחרוזות, אבל רק עד מספר תווים נתון. השוואה זו עוצרת לאחר n תווים או בסוף אחת המחרוזות, לפי המוקדם.

strncmp("abcd", "abcf", 3); // מחזיר 0, כי שלושת התווים הראשונים זהים
strncmp("abcd", "abcf", 4); // מחזיר שלילי, כי 'd' < 'f'

מומלץ להשתמש ב־strncmp במקום strcmp כשלא בטוחים באורך המחרוזות או רוצים להשוות רק חלק.


הפונקציה memset ממלאת אזור בזיכרון בערך מסוים. שימוש נפוץ הוא לאיפוס מערכים או מבנים.

char buffer[100];
memset(buffer, 0, sizeof(buffer)); // מאפס את כל התאים לאפס

ניתן גם להשתמש למילוי בערכים אחרים:

memset(buffer, 'A', 10); // עשרת התווים הראשונים יהיו 'A'

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


הפונקציה memcpy מעתיקה תוכן מזיכרון אחד לאחר. ההעתקה מתבצעת בדיוק לפי מספר הבתים המבוקש. אין בדיקה אם האזורים חופפים – לכן לשימוש באזורים חופפים עדיף memmove.

char src[] = "hello";
char dest[100];
memcpy(dest, src, strlen(src) + 1); // כולל תו הסיום '\0'

שימוש נפוץ הוא העתקת מבנים, מערכים או חלקי זיכרון לא תלויים. חייבים לוודא שהיעד מספיק גדול להכיל את התוכן המועתק.