Invertir archivo en C

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define NUMCARACTERES 100
void invierte(char cadfuente[NUMCARACTERES],char caddest[NUMCARACTERES]);
void copia_invertida(char *nombrearchivoleer, char *nombrearchivoescribir);


int main(int argc, char* argv[]){
 //Comprobamos que el número de argumentos del programa sea correcto
 if (argc != 3){
  printf("Número de parámetros erróneo");
 }else {
  //Si es correcto, realizamos lo que se pide. Le pasamos los nombres de los archivos (argumentos del programa)
  copia_invertida(argv[1],argv[2]);
 }
 return 0;
}
//Función que invierte la cadena fuente y la guarda en la cadena destino
void invierte(char cadfuente[NUMCARACTERES],char caddest[NUMCARACTERES])
{
 int longitud,i,j;
 //Calculo la longitud
 longitud=strlen(cadfuente);
 //La cadena origen (índice i) se posiciona al final de la misma
 j=longitud-1;
 //Recorremos la cadena destino desde el principio 
 for (i=0;i<longitud;i++)
 {
  caddest[i]=cadfuente[j];
  //La cadena origen se recorre de atrás a adelante
  j--;
 }
 //Ponemos el carácter terminador de cadena en la cadena destino en la última posición
 caddest[longitud]='\0';
 return;
}

//Función que copia el contenido de un archivo en otro invirtiendo cada línea
void copia_invertida(char *nombrearchivoleer, char *nombrearchivoescribir)
{
 FILE *parchivolectura, *parchivoescritura;
 char linealeida[NUMCARACTERES], lineainvertida[NUMCARACTERES];
 int fin=0;
 
 //Abrimos los archivos
 parchivolectura = fopen(nombrearchivoleer,"r");
 parchivoescritura = fopen(nombrearchivoescribir,"w");
 
 //Comprobamos si la apertura ha sido correcta
 if ((parchivolectura == NULL)||(parchivoescritura == NULL)){
  printf("Error al abrir ficheros");
 }else {
  //Recorremos el archivo de lectura mientras no se acabe
  do {
   //Leemos una línea del archivo
   fgets(linealeida,NUMCARACTERES,parchivolectura);
   if (!feof(parchivolectura)){
     //Invertimos la línea leída
    invierte(linealeida,lineainvertida);
    //Copiamos la cadena invertida en el archivo
    fprintf(parchivoescritura, "%s", lineainvertida);
   }
   else
    fin=1;
  }while (!fin);
  //Cuando llegamos al final del archivo de lectura, cerramos los archivos
  fclose(parchivolectura);
  fclose(parchivoescritura);
 }
 return;

}