¡Buenas!
Tambien puedes asignar la memoria seguna vayas leyendo caracteres:
int main(int argc, char *argv[])
{
char *cadenas[N_CADENAS],lector;
int i,ncaracteres;
for(i = 0 ; i < N_CADENAS ; i++)
{
cadenas[i] = NULL;
ncaracteres = 0;
{
cadenas
[i
] = (char*) realloc(cadenas
[i
] , (ncaracteres
+ 2) sizeof(char));
cadenas[ncaracteres] = lector;
cadenas[ncaracteres + 1] = '\0';
ncaracteres++;
}
}
}
Eso si, este codigo puede dar errores si no se consigue asignar la memoria, corrige eso y listo.
¡Saludos!
PD: Es codigo lo he puesto mientras lo pensaba, asi que puede tener errores. Si los hay, no creo que sean dificiles de detectar y corregir.