פורסם 2010 במרץ 115 שנים אני מנסה לבנות את פונקציה הזאת אבל זה לא מתקמפל אשמח לעזרה#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);}
פורסם 2010 במרץ 115 שנים אתה מתכוון return 0.פותח הת'רד - לא נוכל לדעת מה הבעיה אם לא תאמר לנו איזו הודעת שגיאה נותן לך הקומפיילר.
פורסם 2010 במרץ 315 שנים המימוש שלך מכיל בעיות: אין לך הגבלת גודל על הבאפרים, הפונקציה עצמה מקצה זיכרון שמישהו אחר אמור לדעת לשחרר מבחוץ (אחד האסונות הגדולים שאפשר לעשות בC), אין בדיקות תקינות על הפוינטרים שמועברים, ולקרוא לstrcpy בתוך פונקציית העתקת סטרינגים זה די מיותר (למה שלא תשתמש בstrcpy בחוץ וזהו?)
פורסם 2010 במרץ 315 שנים קודם כל, תקרא קצת על strdup. בבקשה:http://linux.die.net/man/3/strdupולטענותיך:אין לך הגבלת גודל על הבאפריםאין שום בעיה עם זה, הוא מקצה את הבאפר בעצמו, בדיוק בגודל שהוא צריך.הפונקציה עצמה מקצה זיכרון שמישהו אחר אמור לדעת לשחרר מבחוץ (אחד האסונות הגדולים שאפשר לעשות בC)זה ממש לא אסון גדול, כל עוד מוצהר בתיעוד של הפונקציה שמי שקורא לה צריך לקרוא ל-free בעצמו.למה שלא תשתמש בstrcpy בחוץ וזהו?כי זו לא הדרישה?
פורסם 2010 במרץ 515 שנים המימוש הוא קטן ונחמד. הבעיה היחידה שאני רואה בפונקציה זה שהיא לא בודקת אם הפרמטר הוא NULL לפני ההקצאה וה-strlen. (מצד שני אולי strdup אמורה לעבוד ככה? לא בדקתי)
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.