עזרה בשפת C - מצביע למחרוזת - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

עזרה בשפת C - מצביע למחרוזת


Dolmiti
 Share

Recommended Posts

#include <stdio.h>
#include <string.h>
void f(char *p)
	{
		strcpy(p,p+2);
	}
void main()
{
	char *myName="david";
	f(myName);
	printf("%s", myName);
}

האם הפונקציה תעבוד ותקצץ את המחרוזת? אם p עובר by value אז הפונקציה אמורה לקצץ את המחרוזת המקורית?

קישור לתוכן
שתף באתרים אחרים

 

- לא מכיר דרך ב-C להעביר מחרוזת by value, מה שבפועל עובר זה פוינטר לאיבר הראשון של המחרוזת.

- אסור להשתמש ב-strcpy כשמחרוזת המקור והיעד חופפות בזכרון

נערך על-ידי etal
קישור לתוכן
שתף באתרים אחרים

לא טענתי שזה לא עובד.

השימוש ב-strcpy הוא לא נכון כי התוצאה בשימוש כזה היא undefined כלומר שפת ה-C לא מבטיחה לך תוצאה מסויימת. המשמעות היא שהתוצאה תלויה במימוש הספציפי של הפונקציה, בסביבה שונה, בקומפיילר אחר אתה עלול לקבל תוצאה שונה.

נערך על-ידי etal
קישור לתוכן
שתף באתרים אחרים

אוקיי. אז כדי להבין את דבריך, זה אומר שהקוד להלן כן יעבוד וידפיס דן? [כי אני מקבל שגיאה Segmentation fault על השורה של דן)

 

void f(char *p)
	{
		strcpy(p,"Dan");
	}
void main()
{
	char *myName="david";
	f(myName);
	printf("%s", myName);
}

 

נערך על-ידי Dolmiti
קישור לתוכן
שתף באתרים אחרים

הצטרפ/י לדיון

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

אורח
הוסף תגובה

×   התוכן שהודבק הוא עם עיצוב.   הסר עיצוב

  Only 75 emoji are allowed.

×   הקישור שלך הוטמע אוטומטית.   הצג כקישור רגיל

×   התוכן הקודם שלך שוחזר אוטומטית.   נקה הכל

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
  • צור חדש...