www.delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/1997/02/25/03:22:05

Message-ID: <33133A4B.1571@post.comstar.ru>
Date: Tue, 25 Feb 1997 11:15:23 -0800
From: Dim Zegebart <zager AT post DOT comstar DOT ru>
Reply-To: zager AT post DOT comstar DOT ru
Organization: zager AT post DOT comstar DOT ru
MIME-Version: 1.0
To: DJGPP Mail List <djgpp AT delorie DOT com>
Subject: Zero length array ?

Hi,
Assume

typedef struct
{ int hName;
  char szName[0];
} TFoo;

TFoo* foo(char *szFooName)
{ TFoo *MyFoo=(TFoo*)malloc(sizeof(TFoo)+strlen(szFooName)+1);
  if (MyFoo==NULL) return(NULL);
 
  strcpy(MyFoo->szName,szFooName); 
  return(MyFoo);
}


My question is : then I allocate space for MyFoo where actualy
MyFoo->szName points ?

I mean, if I declared not char szName[0] but char szName[MAX_NAME_LEN] I
knew what in memory it looks like that :
let MyFoo=(addressA) then
&(MyFoo->hName) == addressA
&(MyFoo->szName[0]) == addressA+sizeof(int)
&(MyFoo->szName[MAX_NAME_LEN]) == addressA+sizeof(int)+MAX_NAME_LEN

And I try to understand (without success ;( ) if I declare zero length
array what happen :
let MyFoo=(addressA) then
&(MyFoo->hName) == addressA
&(MyFoo->szName[0]) == addressA+sizeof(int)  ?????????????????? or
&(MyFoo->szName[0]) == addressB
&(MyFoo->szName[MAX_NAME_LEN]) == addressA+sizeof(int)+MAX_NAME_LEN
????????????????? or &(MyFoo->szName[MAX_NAME_LEN]) == addressB +
MAX_NAME_LEN 
i.e. MyFoo->szName points somewhere in memory and I can't do
write(hFile,MyFoo,sizeof(TFoo)+strlen(szName)+1) to write
contest of whole structure to the file ?

-- 
Regards,
Dim Zegebart,
Moscow Russia.

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019