First of all, I'd recommend forgetting about 2D arrays and going to something more high-level like, for instance, a std::vector of std::strings. Anyway, if you can't afford it, the syntax you must follow is like this:
void F2(char array[][MAX_STRING_SZ+1],int len);
Here len is needed to inform about the first dimension of the 2D array. To define a variable capable of holding 2D arrays of unspecified (i.e. determined at run-time) first dimension, the syntax is:
char (* MyArray)[MAX_STRING_SZ+1];
which is also the return type of your F1 function. Remember, the first dimension must be passed along somehow. And please allow me to recommend you again that you use STL containers to make your life easier. Joaquín M López Muñoz Telefónica, Investigación y Desarrollo