ABA


"שאלה בשפת C"
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #8557 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 8557
GK2k

   18:59   13.12.02   
אל הפורום  
  שאלה בשפת C  
 
   איך אני מחזיר מפונקציה מחרוזות???

זאת אומרת איך הפונקציה ניראת
כי אני לא יודע אם היתן לעשות כך:
char XXX(int x,in b
וזה עדיין יחזיר לי מחרוזת ולא תו בודד


                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  אתה צריך להחזיר מצביע (פויינטר) למערך של תווי Quant86 13.12.02 19:02 1
     כנס בבקשה GK2k 13.12.02 19:07 2
         ככה ככה Quant86 13.12.02 23:17 3
             אכן יש בעייתיות מסוימת dryice 14.12.02 11:59 4
                 הפתרון האולטמטיבי Boaz_fr 14.12.02 20:49 5

       
Quant86

   19:02   13.12.02   
אל הפורום  
  1. אתה צריך להחזיר מצביע (פויינטר) למערך של תווי  
בתגובה להודעה מספר 0
 
   כלומר CHAR* יעני ההגדרה של הפונקציה שלך תראה ככה:
char* myfunc............


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
GK2k

   19:07   13.12.02   
אל הפורום  
  2. כנס בבקשה  
בתגובה להודעה מספר 1
 
   אתה מתכוון ככה נכון?

*char XXX.....
ולאן זה בעצם ייכנס?
מאיפה הוא יודע לאן הפויינטר הולך?

תודה


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Quant86

   23:17   13.12.02   
אל הפורום  
  3. ככה ככה  
בתגובה להודעה מספר 2
 
  

char* GetHello()
{
return "hello";
}
int main()
{
char* str = new char;
str = GetHello();
}

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


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
dryice

   11:59   14.12.02   
אל הפורום  
  4. אכן יש בעייתיות מסוימת  
בתגובה להודעה מספר 3
 
   כשמדברים על הזכרון אליו מצביעים.
מה שאתה כתבת לעיל, כעקרון יעבוד, אתה מחזיר מחרוזת קבועה שמופיעה
בקוד. אני לא מכיר שום מימוש שבו זה לא יעבוד אבל בתאוריה
התקן לא מתחייב שזה יעבוד.

כמובן שלרוב אנחנו נתעניין במשהוא יותר מתוחכם, אם המחרוזת מוגדרת
על המחסנית אז וודאי שאי אפשר להחזיר אותה:


char *bad_example()
{
char err[10]
...
return err;
}
[/code

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

DRYICE


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Boaz_fr

   20:49   14.12.02   
אל הפורום  
  5. הפתרון האולטמטיבי  
בתגובה להודעה מספר 4
 
   להגדיר מחלקה של מחרוזת
שיודעת לאסןף זכרון, ולשחרר אותו בעצמה
(או להשתמש במשכבר קיים)

s22Boaz_frs33


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net