Perchè se dichiari un'array multidimensionale, come dice chiaramente l'errore del compilatore, devi obbligatoriamente dare un limite per tutte le dimensioni (ad eccezione della prima).
Questo perchè ogni volta che allochi un array il compilatore necessita di sapere quanto è grande ogni elemento dell'array: in questo caso, tu stai dichiarando un array di array, quindi devi specificarne la dimensione.
Dato che una stringa è un char*, puoi risolvere il problema semplicemente così:
dove parole è dichiarato come un array di char*, ovvero stringhe (nota che anche l'argomento argv del main si dichiara così).codice:int sposta_parola(char* parole[], int n)
In generale, se devi passare un array bidimensionale di cui non conosci le dimensioni fai:
oppurecodice:tipo* matrix[]
Entrambe queste scritture funzionano anche con più dimensioni:codice:tipo** matrix
Ricordati però che ora ogni elemento dell'array è solo un puntatore, che non punta a niente finchè non gli assegni un'area di memoria.codice:int*** matrix[]