עבור לתוכן

שאלה פשוטה ב-CPP

Featured Replies

פורסם

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

אני ממשיך בכל זאת להריץ את התוכנית והיא לא מפסיקה לקלוט אחרי 5 תווים. מישהו יכול לעזור לי .הנה מה שרשמתי.

char *ptr;

int i=0;

cout<<"enter string 5 letters"<<endl;

( + + for(i=0;i<5;i

[ cin>>ptr[i;

פורסם

קודם כל, ערוך את ההודעה ושים את הקוד שלך בטג קוד (כפתור # למעלה) כדי שייראה נורמלי.

לגבי השאלה:

כשהגדרת את ptr, הוא למעשה לא מצביע לכלום (ליתר דיוק, הוא מצביע למקום אקראי בזכרון).

אתה צריך לעשות אחד משני דברים:

א. להשתמש במערך קבוע, ולא במצביע, כלומר:

char arr[5];

(ולקרוא לתוך arr)

ב. להקצות מערך עבור המצביע:

char *ptr;
ptr = new char[5];

(דאג לשחרר אותו בסוף עם delete)

פורסם
  • מחבר

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

פורסם

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

2. באופן דומה ל-1 אתה יכול לשריין מקום מאד גדול בזכרון למחרוזת, נניח 500 תוים, ואחרי הקליטה לבצע realloc רק לתווים שאכן נקלטו בפועל.

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

פורסם

הוא עובד ב-++C, לא C. משתמשים ב-new, לא malloc.

בעקרון בשביל זה נועד הקלאס string שמהווה מחרוזת בגודל דינמי (ומנהל את כל הקצאות ושחרורי הזכרון בשבילך).

ארכיון

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

דיונים חדשים