I have read in ANSI C by kernighan and Ritche that an object deaclared as an array type with out specifying the size of the array will be an incomplete type.
section A.8.6.2
Two-dimensional arrays in C are stored in a one-dimensional way internally, and (as ausadl says) the compiler doesn't try to guess at the size of the "inner" dimension.
Things are more complicated because of course there is no proper string handling. I guess you really want an array of strings (not a two-dimensional array of chars), so it might be better to declare it as an array of pointers to char, then assign those pointers to memory allocated by malloc, or to string constants.