פורסם 2011 באוגוסט 314 שנים או במילים אחרות יש לי כמה טעויות בקוד: רשמתי בהערה את השגיאותאני רוצה לכתוב פונקציה שמחזירה מחרוזת: מתחילה במילה דודו ומסתיימת במספר רנדומלי מ-0 עד 99999 char* GetStr();main(){ int i; for (;i<3; i++) { char *p = GetStr(); fprint("%s", &p);//run time error }return 0;}char* GetStr(){ char pre[5]="dudu", suf[6]="", *ans; sprintf (suf, "%d", rand() % 100000); //Concatenates strcpy(&ans, ""); strcat(&ans, pre); strcat(&ans, itoa(suf)); fprint("ans: %s",&ans); //show: dudu@#$@#$return ans;}
פורסם 2011 באוגוסט 314 שנים אתה משתמש ב-ans בלי לאתחל אותו בכלל - הוא מצביע לזבל. חוץ מזה אתה גם משתשמ ב-strcpy,strcat ו-itoa לא נכון.יש שתי דרכים "להחזיר" מחרוזת מתוך פונקציה: או שהפונקציה תקצה את המחרוזת בעצמה (malloc) ותחזיר אותה (ואז מי שמשתמש בפונקציה יהיה אחראי לשחרר אותה כשהוא מסיים לעבוד איתה), או שהפונקציה תקבל כפרמטר מצביע למערך שהוקצה מראש (כלומר, נקרא malloc מחוץ לפונקציה, או שזה מערך סטטי) ואז היא רק צריכה למלא אותו.
פורסם 2011 באוגוסט 314 שנים מחבר אתה משתמש ב-ans בלי לאתחל אותו בכלל - הוא מצביע לזבל. איך לאתחל? חוץ מזה אתה גם משתשמ ב-strcpy,strcat ו-itoa לא נכון.איך משתמשים נכון?יש שתי דרכים "להחזיר" מחרוזת מתוך פונקציה: או שהפונקציה תקצה את המחרוזת בעצמה (malloc) ותחזיר אותה (ואז מי שמשתמש בפונקציה יהיה אחראי לשחרר אותה כשהוא מסיים לעבוד איתה) הכוונה שפונקציה main עושה free למצביע שכלל לא נמצא אצלה?
פורסם 2011 באוגוסט 314 שנים איך לאתחל?באמצעות malloc כמובן.איך משתמשים נכון?קוראים את התיעוד של הפונקציות ו/או מחפשים דוגמאות שימוש.הכוונה שפונקציה main עושה free למצביע שכלל לא נמצא אצלה?למה לא נמצא אצלה? מי שקורא לפונקציה מקבל את המצביע בערך ההחזרה. היא צריכה לשמור את הערך הזה בצד, ובסיום העבודה איתו לשחרר אותו.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.