From: sparhawk AT eunet DOT at (Gerhard Gruber) Newsgroups: comp.os.msdos.djgpp Subject: Re: Size of a struct is not correct Date: Thu, 02 Jul 1998 19:58:39 GMT Organization: Customer of EUnet Austria Lines: 45 Message-ID: <35a7e356.2691607@news.Austria.EU.net> References: <01bda5a5$ce48b420$0100a8c0 AT dismuntel DOT ctv DOT es> NNTP-Posting-Host: e103.dynamic.vienna.at.eu.net Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit To: djgpp AT delorie DOT com DJ-Gateway: from newsgroup comp.os.msdos.djgpp Precedence: bulk Destination: "Javier Calleja" From: Gruber Gerhard Group: comp.os.msdos.djgpp Date: Thu, 2 Jul 1998 12:40:18 +0200: >Hi world > > I have built the following struct: > > struct > { > char one; > short two,three; > long four > } foo; > > But when I do sizeof of this struct, the result is wrong (it says the >struct has 12 bytes). > I think gcc tryes to allocate the struct variables in blocks of 4 bytes. > But I have a problem, because I use the following sentence: > > memcpy(pointer_to_memory,&foo,sizeof(foo)); > > And I must to allocate each variable in a memory position of 9 bytes, >when the first byte is one variable, the following two bytes are a short >variable, ... > > Does anything have a solution? Yes. move that char one; to the end of the struct. It is not sure that this really works, but I think usually most compilers add pad bytes to the end of a structure. Why you woud have a problem with memcpy I don't understand. As long as you use everywhere sizeof(foo) to get the size, the code should work on all machines. The only problem you might get is, if you write a datafile on one machine and move it to a different machine with another OS (or CPU). -- Bye, Gerhard email: sparhawk AT eunet DOT at g DOT gruber AT sis DOT co DOT at Spelling corrections are appreciated.