עבור לתוכן

מנסה לבנות STRDUP

Featured Replies

פורסם

אני מנסה לבנות את פונקציה הזאת אבל זה לא מתקמפל אשמח לעזרה

#include<stdio.h>
#include <stdlib.h>



char* my_strdup(const char *s)
{
char *p = malloc(strlen(s) + 1);
if(p) { strcpy(p, s); }
return p;
}
void main()
{

char *d;
d=my_strdup("hellow");
printf(d);
}

פורסם

חוץ מחוסר התקינות של פונקציית המיין(מחזירה וויד)

הקוד פועל

פורסם
  • מחבר

איך אני מסדר את MAIN?

פורסם

איך אני מסדר את MAIN?

int main()

ובתוך הפונקציה בסופה עושה return 1;

פורסם

אתה מתכוון return 0.

פותח הת'רד - לא נוכל לדעת מה הבעיה אם לא תאמר לנו איזו הודעת שגיאה נותן לך הקומפיילר.

פורסם

נראה לי שאתה צריך רווח בinclude הראשון, וחסר לך #include <strings.h>

פורסם

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

פורסם

קודם כל, תקרא קצת על strdup. בבקשה:

http://linux.die.net/man/3/strdup

ולטענותיך:

אין לך הגבלת גודל על הבאפרים

אין שום בעיה עם זה, הוא מקצה את הבאפר בעצמו, בדיוק בגודל שהוא צריך.

הפונקציה עצמה מקצה זיכרון שמישהו אחר אמור לדעת לשחרר מבחוץ (אחד האסונות הגדולים שאפשר לעשות בC)

זה ממש לא אסון גדול, כל עוד מוצהר בתיעוד של הפונקציה שמי שקורא לה צריך לקרוא ל-free בעצמו.

למה שלא תשתמש בstrcpy בחוץ וזהו?

כי זו לא הדרישה?

פורסם

המימוש הוא קטן ונחמד. הבעיה היחידה שאני רואה בפונקציה זה שהיא לא בודקת אם הפרמטר הוא NULL לפני ההקצאה וה-strlen. (מצד שני אולי strdup אמורה לעבוד ככה? לא בדקתי)

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים