> I am seeking to do the following:
> 
> struct something {
> 
>   char *n1;
>   char *n2;
>   char *list[];
> };
> 
> struct something st[] = {
>   { "a1", "a2", {"a3", "a4", "a5", NULL}};
> 
> with lots of initializers like the above, where the list element can have
> any number of things in it.
Unfortunately, "char *list[]" declares an array of pointers to
"char", which would, given that there's no size between the "[]"s, make
"struct something" a variable-length structure, with the length
dependent on the size of the "list" array.
C doesn't support variable-length arrays; you can have a fixed-length
array whose size is specified by the number of initializers it has, or
can externally declare an array whose size is fixed but unknown, but
those aren't true variable-length arrays.
In addition, all members of an array must be the same size, so, even if
C *did* allow you to have variable-length arrays like that, making
"struct something" a variable-length structure, you couldn't have an
array of them.
To make an array of structures like that, you'd have to pick a fixed
maximum size for "list".
Alternatively, you could declare it as
	struct something {
		char	*n1;
		char	*n2;
		char	**list;
	}
and declare the lists as arrays of their own, and initialize the "list"
members of the elements of the "struct something" to point to those
arrays.