Estimado, varios comentarios:
1) El primer problema que te encuentras es que las preguntas de ese parcial (y del que propondremos) resultaban naturales para alguien que hubiera desarrollado el código de los obligatorios de esa edición del curso. Habiendo
hecho la tarea era rápido entender de qué se hablaba. Como para que quede como insumo por si alguien quiere profundizar, me tome la molestia de subir las letras de los obligatorios 2020 en la sección de recursos y materiales, PERO, noten que precisamente nuestra idea es que pongan fuerzas en repasar lo que les hemos pedido y lo que han hecho en los obligatorios DEL 2021.
2) La idea de la lógica de esto es la que está descripta en la función leer_archivo_txt (ver página 9 del pdf del obligatorio 2 del 2020 que subí). Paso a explicar: la idea es salir de la función con un arreglo de caracteres cargado con ciertos valores que se leen de un archivo. Antes del llamado a la función leer_archivo_txt no se sabe de que tamaño debe ser el arreglo en el que se guardará la función.
3) Por esto, el uso de la función leer_archivo_txt (desde afuera) debe ser el de definir un puntero (que oficia de arreglo de tamaño desconocido), pasar dicho puntero por referencia, y en leer_archivo_txt encargarse de determinar qué tamaño se desea
para el arreglo y reservar memoria para esa dimensión. Va un ejemplo en implementación de lo que digo, sacado de mi solución del curso del año pasado (nótese el uso de buenas prácticas de programación que logra que el código sea claro y legible un año después):
CodigoError leer_archivo_txt(FILE* fpIn, unsigned char **Msj, int* nbM){
if (fpIn==NULL)
return ARCHIVO_INEXISTENTE; /*reconozco si el file es null*/
int i;
*nbM = tamano_archivo(fpIn);
*Msj = (unsigned char *) malloc(sizeof(unsigned char)*(*nbM));
for (i = 0; i < *nbM; ++i)
(*Msj)[i] = (unsigned char) fgetc(fpIn);
return TODO_OK;
}
CodigoError codificar(FILE *fpIn, FILE *fpOut, codificacion* tablaCod, int nbS){
CodigoError scanflag;
unsigned char *Msj;
int nbM=0;
leer_archivo_txt(fpIn, &Msj,&nbM);
scanflag = codificarConTabla(tablaCod, nbS, Msj, nbM, fpOut);
free(Msj);
return scanflag;
}