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

איך פונקציה מחזירה מחרוזת בשפת C?


assaf990

Recommended Posts

או במילים אחרות יש לי כמה טעויות בקוד: רשמתי בהערה את השגיאות

אני רוצה לכתוב פונקציה שמחזירה מחרוזת: מתחילה במילה דודו ומסתיימת במספר רנדומלי מ-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;
}

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

אתה משתמש ב-ans בלי לאתחל אותו בכלל - הוא מצביע לזבל. חוץ מזה אתה גם משתשמ ב-strcpy,strcat ו-itoa לא נכון.

יש שתי דרכים "להחזיר" מחרוזת מתוך פונקציה: או שהפונקציה תקצה את המחרוזת בעצמה (malloc) ותחזיר אותה (ואז מי שמשתמש בפונקציה יהיה אחראי לשחרר אותה כשהוא מסיים לעבוד איתה), או שהפונקציה תקבל כפרמטר מצביע למערך שהוקצה מראש (כלומר, נקרא malloc מחוץ לפונקציה, או שזה מערך סטטי) ואז היא רק צריכה למלא אותו.

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

אתה משתמש ב-ans בלי לאתחל אותו בכלל - הוא מצביע לזבל.

איך לאתחל?

חוץ מזה אתה גם משתשמ ב-strcpy,strcat ו-itoa לא נכון.

איך משתמשים נכון?

יש שתי דרכים "להחזיר" מחרוזת מתוך פונקציה: או שהפונקציה תקצה את המחרוזת בעצמה (malloc) ותחזיר אותה (ואז מי שמשתמש בפונקציה יהיה אחראי לשחרר אותה כשהוא מסיים לעבוד איתה)

הכוונה שפונקציה main עושה free למצביע שכלל לא נמצא אצלה?

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

איך לאתחל?

באמצעות malloc כמובן.

איך משתמשים נכון?

קוראים את התיעוד של הפונקציות ו/או מחפשים דוגמאות שימוש.

הכוונה שפונקציה main עושה free למצביע שכלל לא נמצא אצלה?

למה לא נמצא אצלה? מי שקורא לפונקציה מקבל את המצביע בערך ההחזרה. היא צריכה לשמור את הערך הזה בצד, ובסיום העבודה איתו לשחרר אותו.

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

ארכיון

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

×
  • צור חדש...