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/

Reply via email to