| delorie.com/archives/browse.cgi | search |
| X-Originating-IP: | [200.34.143.17] |
| From: | "J. L." <jlsgarrido AT hotmail DOT com> |
| To: | <djgpp AT delorie DOT com> |
| References: | <b07318$3eg$1 AT news DOT online DOT de> |
| Subject: | Re: sizeof(struct x) doesn't compile -- how to do it ? |
| Date: | Thu, 16 Jan 2003 15:18:57 -0600 |
| MIME-Version: | 1.0 |
| X-Priority: | 3 |
| X-MSMail-Priority: | Normal |
| X-Mailer: | Microsoft Outlook Express 5.50.4807.1700 |
| X-MimeOLE: | Produced By Microsoft MimeOLE V5.50.4807.1700 |
| Message-ID: | <OE172uNUICAazonR8uH0000625c@hotmail.com> |
| X-OriginalArrivalTime: | 16 Jan 2003 21:19:30.0161 (UTC) FILETIME=[F4F26E10:01C2BDA4] |
| Reply-To: | djgpp AT delorie DOT com |
"Lars Hansen" <lars DOT o DOT hansen AT gmx DOT de> wrote:
> #include "stdlib.h"
>
> struct x
> {
> double x;
> };
>
> int main()
> {
> x* n=malloc(2*sizeof(struct x));
Huh? Maybe you are thinking in something like
struct x
{
double y;
};
int main()
{
struct x *n = malloc(2*sizeof(struct x));
/* better is the C idiom
struct x *n = malloc(2*sizeof *n);
*/
}
[snip]
> And also: if i have an array of a struct with several elements how can i
know
> at which byte an element of the nth struct is in that array with djgpp (eg
> after writing a struct array to file and then loading this data without
> knowing how to "synchronize" djgpps compiler struct array generation and
> saving and an other compilers array struct generation and loading means
one
> best knows the byte position (and length))
>
ISO C defines the macro offsetof that gives the byte offset of a field
whitin a struct. And if the index in array is k, then
k*sizeof *n +offsetof(y) */or k*sizeof(struct x) + offsetof(y) */
gives the answer in you example.
But you must be careful; binary data isn't portable between compilers.
HTH
| webmaster | delorie software privacy |
| Copyright © 2019 by DJ Delorie | Updated Jul 2019 |