En regardant plus attentivement le code, il y a plusieurs autres problèmes potentiels :
- Il manque les tests des codes retour des différentes fonctions, en particulier de fopen().
- Il n'y a pas de vérifications des formats et de la taille des buffer. A la moindre erreur de format dans un des fichiers et le programme part en sucette.
- Pourquoi ouvrir les fichiers en mode "r+", en général c'est source de problème. Si tu veux seulement les lire, "r" suffit.
- Certains fichiers ouverts dans la boucle ne sont pas refermés (mais réouverts au passage suivant), par exemple "logindex3.log".
- Le comportement de fflush(stdin) n'est pas défini par la norme. En outre je ne vois pas ce que tu essaies de faire ici avec cet appel.
- Tu manipules les fichiers à la fois directement dans ton code (appel à fopen, fscanf, etc.) et au travers d'autres fonctions qui manipules le nom de fichier (file_line_delete, file_delete, etc.). Es-tu certain qu'il n'y a pas d'interférence possible entre les deux ? En général ce n'est pas une bonne idée de mélanger les styles de la sorte.
- L'écriture
est une façon compliquée d'écrire
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 char files_rep[64]; strcpy(files_rep, "./logwork/3");
En outre je ne vois pas l'intérêt de passer par une variable temporaire ici, autant l'utiliser directement dans la chaîne de commande.
Code : Sélectionner tout - Visualiser dans une fenêtre à part char files_rep[] = "./logwork/3";- Beaucoup de valeur numérique et de chaîne de caractère en dur dans le code. Il serait plus simple de les passer en globales "static const" ou en define.
- Pourquoi créer et initialiser index_name pour ensuite utiliser la chaîne en dur dans le code et pas la variable ?
- Les commentaires // et la déclaration de variable au milieu du code sont autorisé en C99 pas en C90.
- Certaines opérations et déclarations de variable gagneraient probablement à être sortie de la boucle.
- Certains appels à fscanf() pourrait avantageusement être remplacés par des appels à fgets().
- Puisque tu utilises visiblement un compilateur C99, tu devrais remplacer sprintf() par snprintf().
Partager