J'essaie de comparer 2 fichiers texte et d'imprimer la première ligne où ils diffèrent, mais j'utilise un tampon de 500 dans la commande fgets() et je pense que je gaspille de l'espace. Comment puis-je faire le même programme si je ne connais pas la longueur de la ligne?Comparaison de deux fichiers txt dans c
Voici mon code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char const *argv[])
{
FILE *fp1, *fp2;
int nLine = 1;
char l1[500], l2[500];
system("clear");
if (argc < 3)
{
printf("Usage: %s <file1.txt> <file2.txt>\n",argv[0]);
exit(1);
}
if ((fp1 = fopen(argv[1],"r")) == NULL){
printf("Can't open file: %s\n", argv[1]);
exit(1);
}
if ((fp2 = fopen(argv[2],"r")) == NULL){
printf("Can't open file: %s\n", argv[2]);
exit(1);
}
fgets(l1,500,fp1);
fgets(l2,500,fp2);
while ((l1 != 0) && (l2 != 0)){
if(strcmp(l1,l2) != 0){
printf("Line number: %d\n", nLine);
printf("%s", l1);
printf("%s\n", l2);
exit(1);
} else {
fgets(l1,500,fp1);
fgets(l2,500,fp2);
nLine++;
}
}
return 0;
}
Si les fichiers ne différer, vous avez une boucle infinie. Vérifiez la valeur de retour de 'fgets()'. – chux
Vous pouvez comparer les caractères des deux fichiers, si le caractère est différent, appelez une fonction pour imprimer la ligne. Cela peut être difficile car nous ne suivions pas la ligne. Vous pouvez inverser le cheminement jusqu'à obtenir un nouveau trait. puis imprimez la ligne. –
Vous n'avez pas besoin de tampons pour atteindre votre objectif. Je compare simplement les caractères correspondants à la volée et je me souviens du dernier caractère de nouvelle ligne que vous avez rencontré dans le processus. – mw215