Mail Archives: djgpp/1997/02/25/03:22:05
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 -