Message-ID: <33133A4B.1571@post.comstar.ru> Date: Tue, 25 Feb 1997 11:15:23 -0800 From: Dim Zegebart 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 Subject: Zero length array ? Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit 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.