Ciao ... Ci sono degli errori nella funzione separa_maiuscole_minuscole :
codice:
void separa_maiuscole_minuscole (char s[][N], char vetc1[], char vetc2[], int num_s) {
int i,j; int k1=0; int k2=0;
for(i=0; i<num_s; i++)
for(j=0;s[i][j]!='\0';j++) {
if (s[i][j]>= 'A' && s[i][j]<='Z') {
vetc1[k1]=s[i][j];
k1++;}
else
vetc2[k2]=s[i][j];
k2++; }
// Qui devi terminare le 2 stringhe (vetc1 e vetc2)
vetc1[k1] = '\0';
vetc2[k2] = '\0';
printf("il vettore maiuscole e' \n");
// printf("%s", vetc1 [i]); ERRORE
printf("%s", vetc1);
printf("il vettore minuscole e'\n");
//printf("%s", vetc2 [i]); ERRORE
printf("%s", vetc2);
}
Ricordati anche che è brutta abitudine non inizializzare un puntatore (anche se non si userà al momento) come hai fatto tu ... Se non gli si vuole assegnare un valore subito si usa inizializzarlo a NULL
codice:
FILE* f = NULL; // nel tuo caso
Questo perchè può comportare degli errori difficili da scovare.
Comunque il codice da te proposto è soggetto a delle restrizioni come ad esempio la lunghezza delle stringhe nel file ...