שאלה די טיפשית

ilankt

New member
שאלה די טיפשית

נגיד יש לי buffer שקראתי מקובץ, ויש ב buffer כמה structים. אם היה לי struct אחד הייתי עושה פשוט memcpy, אבל אחרי ה struct הראשון יש לי עוד אחד, ואחריו עוד אחד וכו... יש פונקציה כמו memcpy אני נותן לה גם מאיפה להתחיל להעתיק?
 

ברנדל

New member
לא הבנתי מה הבעיה

למה שלא תקרא את זה עם memcpy כשאתה מעביר לו pointer למערך של structs?
 

ilankt

New member
כי זה לא טוב, לפעמים יש רווחים בין

ה structים. זה קובץ BMP.
 

ilankt

New member
טוב עזבו, הסתדרתי

מה שמוזר זה שמה שהצליח לי זה מה שניסיתי בהתחלה, ולא עבד לי אז...
 

IdanR

New member
קודם-כל..

אתה יכול פשוט לקדם את המצביע של הbuffer. buffer + sizeof(somestruct) נגיד. אבל למה בכלל להשתמש בmemcpy? בשביל מה הbuffer קיים, מה אתה עושה? חבל הרי להעתיק סתם, ולתפוס עוד מקום בזיכרון, כשאתה יכול פשוט לעשות הסבת מפורשת של מצביעים מנניח char* לyourstruct* .... ואז להתייחס לשדות שלפי הstruct הזה.
 

Zack DA

New member
כאן כבר תלוי מה הוא רוצה לעשות...

השאלה היא למה לקרוא buffer גדול מראש כשאתה יודע גם ככה איפה מסתיים ומתחיל כל struct. לא עדיף כבר לקרוא את זה לפי ה- structs שאתה רוצה להשתמש בהם ?
 

ilankt

New member
מה שניסיתי לעשות את זה לממש פונקציה

CreateSurfaceFromFileInMemory, כמו זאת של DirectX. אז הייתי צריך לקרוא קובץ BMP שיש לו BMFILEHEADER ו BMINFOHEADER שבינהם יש רווח מסויים, לא קבוע מראש (אני חושב).
 

DNile

New member
אפשר להגדיר struct אחד גדול,

שהmembers שלו, הם הstructים האחרים.
 

Zack DA

New member
אם אין בין ה- structs האלה

קשר לוגי חזק דיו, זה עלול לצאת מגעיל...
 

DNile

New member
אם אין קשר לוגי,

מלכתחילה הוא לא היה צריך לאחד ביניהם.. לדוגמה: struct QouteOfTheDayPacket { EthernetHeader eth; IpHeader ip; UdpHeader udp; QOTDHeader qotd; };
 
למעלה