ההבדל בין *const char ו-"טקסט"

gillf

New member
ההבדל בין *const char ו-"טקסט"

שלום לכולם יש לי תוכנית ב++C עם רשימה מקושרת של פוינטרים, בתוכנית יש גם פונקציה שמוסיפה איברים, פונקציה זאת מקבלת משתנה מסוג *const char. כל עוד אני שולח לפונקציה סטרינג בצורה כזאת "text" אין שום בעיה. אך כאשר אני קורא טקסט מקובץ לתוך משתנה מסוג *const char* אני מקבל חלקי מילים. עקבתי כל הדרך אחרי תוכן המשתנים ונראה שהוא מכניס את הטקסט לתוך האוביקט של הרשימה המקשורת.. אך כשאני מנסה להוציא הכל מתבלגן.. למישהו יש רעיון ??
 

yair24

Member
למה אתה מתכוון?

למה אתה מתכוון כשאתה אומר "אך כאשר אני קורא טקסט מקובץ לתוך משתנה מסוג *const char* אני מקבל חלקי מילים." הכוונה שיש לך קובץ ואתה קורא ממנו טקסט בעזרת איזושהי פונקציה שמחזירה CHAR* ומקנן את הפונקציה בקריאה לפונקציה הראשונה? באיזו פונקציה אתה משתמש לצורך קריאת הקובץ? ותן דוגמא לטקסט שקראת אותו מהקובץ, איך הוא נראה בקובץ, ואיך הוא נראה אחרי שהוא עובר את הפונקציה. יאיר
 

gillf

New member
מצאתי את הבעיה

תודה על העזרה מצאתי, הבעיה היא שיש לשמור משתנה מסוג []char ולא *const char בתוך המבנה. בצורה זאת המבנה שומר על תוכן הטקסט גם אם הוא בא ממשתנה.
 

pakmen

New member
הסבר לבילבול

הבעייה היא שכאשר מגדירים משתנה מסוג * char אזי הזיכרון למשתנה מוקצה במחסנית, כלומר מערכת ההפעלה אחראית לו ולכן גם הכל מתבלגן שמנסים לגשת למקום בו כבר מערכת ההפעלה ביצעה שינויים. אולם בהגדרת [] char הזיכרון מוקצה ב - HIP כלומר באחריות המתכנת ולכן אף אחד לא יהרוס את תוכן המשתנה.
 

twiti

New member
למיטב ידיעתי משתנים סטאטיים מוגדרים

במחסנית (STACK SEGMENT) ומשתנים דינאמיים מוגדרים בערימה (HEAP). נכון יותר לאמר שכל משתנה שכתובתו ידועה למהדר, יוגדר באיזור המחסנית וכל משתנה שיש להקצות לו מקום בזמן ריצה יוגדר בערימה שכשמה כן היא, ערימה של תאי זיכרון הזמנים להקצאה. כל דברי נוגעים כמובן לשפות עיליות ולא לאסמבלר. באסמבלר, הגדרת משתנה אפשרי גם ב-data segment (סגמנט הנתונים) וגם במחסנית, וכמובן הקצאות דינאמיות יתבצעו בערימה.
 
למעלה