OK, most of what I would have said has been said by others - sizeof is implemented correctly in that it includes any padding due to byte alignment. If you have any code that relies on sizeof returning the size of the actual data without padding then that code has been written badly and is certainly not portable. If the definition of the structures is specifically yours, you can make sure they are properly aligned internally before sending/receiving the data inside them by including your own padding - but this isn't really portable either. To be properly portable, you would need a function that takes the byte stream and populated each of the structure's elements with the appropriate data (or writes the structure's elements back to the byte stream). However, I can't see this being that future proof either if you are going to change the structures later. To conclude. You need to think more about design rather than trying to take short cuts.
-----Original Message----- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]]On Behalf Of Phong Nguyen Sent: 26 January 2002 03:59 To: Palm Developer Forum Subject: Re: Code Warrior Compiler bug? What I want to do is: char buffer[100]; char* message = buffer; int index = 0; buildHeader (&message[index]); index += sizeof(HeaderType); assembleData (&message[index]); index += 10; buildTrailer (&message[index]); index += sizeof(TrailerType); and return index as the size of the built message. As you can see if sizeof (..) does not return the correct value, it would mess up the content of the message and also the return size. Of course, I can use 3 instead of sizeof(HeaderType) or so but this is not really a good programming practice since I may want to change the structure of HeaderType and TrailerType later. On the other hand I might also want to port existing code built in other platforms to Palm OS and so if sizeof(..) does not return the correct value ....my feeling for CodeWarrior would be "!%$##@!#$%!@#%^$&*" . Regards, --- Max Bian <[EMAIL PROTECTED]> wrote: > What exactly is the problem you have? Accessing the > data in the MessageType > struct? How is that a problem? Because sizeof() > doesn't give you the size you > expect? What structure pointers are you talking > about? > > Max > --- Phong Nguyen <[EMAIL PROTECTED]> wrote: > > Thanks for the answers so far but if there is no > > solution for this issue, it would really be a > SERIOUS > > problem for me and also for everyone out there > when > > using the built-in function sizeof(..) !!!!!!! > What > > can I do if I want to define several structure > types > > defined a structure of a message and try to decode > it > > using the structure pointers as follows: > > > > typedef struct > > { > > char preamble[2]; > > char command; > > } > > HeaderType; > > > > typedef struct > > { > > char checksum[2]; > > char terminator; > > } > > TrailerType; > > > > typedef struct > > { > > HeaderType header; > > char data[10]; > > TrailerType trailer; > > } > > MessageType; > > > > Any solution? Thanks. > > > > --- Joe <[EMAIL PROTECTED]> wrote: > > ??? words cut off... > > ===== > http://www.weirdwww.com/ > > __________________________________________________ > Do You Yahoo!? > Great stuff seeking new owners in Yahoo! Auctions! > http://auctions.yahoo.com > > -- > For information on using the Palm Developer Forums, > or to unsubscribe, please see http://www.palmos.com/dev/tech/support/forums/ __________________________________________________ Do You Yahoo!? Great stuff seeking new owners in Yahoo! Auctions! http://auctions.yahoo.com -- For information on using the Palm Developer Forums, or to unsubscribe, please see http://www.palmos.com/dev/tech/support/forums/ -- For information on using the Palm Developer Forums, or to unsubscribe, please see http://www.palmos.com/dev/tech/support/forums/
