המרה מCSTRING לCHAR*

yair24

Member
המרה מCSTRING לCHAR*

שלום, יש לי את הקוד הבא:
class CBuffer { char m_Buff[8]; public: char* GetString(); void SetString(CString str); void rol(int step); void ror(int step); CBuffer(); virtual ~CBuffer(); }; void CBuffer::SetString(CString str) { CString Out; int i; for(i=0;i<8;i++) m_Buff=(char)str; }

מה שאני מנסה לעשות זה להעתיק תוכן של מחרוזת שנמצאת בתוך מחלקת CSTRING לתוך משתנה שנקרא M_BUFF שמוגדר כמערך של 8 CHARS כשאני מריץ את זה אני מקבל ASSERT למה זה קורה? לעומת זאת בתוך הפונקציה SETSTRING אני יכול למשל להדפיס את התוכן של STR[2] או כל מקום אחר... אז למה הוא לא יכול לעשות השמה של הערך לתוך המערך? יאיר
 

yair24

Member
אופס טעיתי...

המחרוזת היא באורך 8 ואני מכניס לתיבת טקסט מחרוזת קטנה יותר... בגלל זה הוא נופל :)
 

gmorphus

New member
זה בגלל שאתה לא נזהר

אם היית בודק איפה בדיוק הASSERT אני מניח שהיית מגלה שזה משהו כמו:
ASSERT(i<m_nLen);​
כאשר m_nLen יהיה האורך של ה CString ו i יהיה האינדקס ששמת בתוך סוגריים מרובעים, ואז היית מבין שאתה מנסה לגשת לאיבר ב CString שפשוט לא קיים. יותר מזה, כשאתה עושה כזה בלולאת הfor תכתוב ()i<8 && i<str.GetLength ואז זה לא יקרה...
 
למעלה