#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;
}