Bonjour à tous,
Je réalise un programme en C qui nécessite de lire et d'écrire dans des fichiers. Une des fonctions me pose un gros problème car elle est, à l'exécution à l'origine d'une erreur de segmentation. Voici cette fonction:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47 void RegularExpressionsSearch () ,{ FILE *pointeur3; FILE *pointeur5; pointeur3 = fopen ("b.txt", "r"); pointeur5 = fopen ("Intermediaire2.txt", "w"); char SpecialCharacter1 = 'D'; char SpecialCharacter2 = 'p'; char *tab1 = (char *)malloc(10000*sizeof(char)); //Tant que le premier caractère de la ligne est différent de D (cette boucle enregistre dans tab1 toutes les lignes situées avant la phrase commençant par D) while ((getc(pointeur3)) != SpecialCharacter1) { fgets (tab1, 100, pointeur3); } while (fgets(tab1, 100, pointeur3) != NULL) { fprintf (pointeur5, "%s", tab1); } fclose (pointeur3); fclose (pointeur5); FILE *pointeur6; FILE *pointeur7; pointeur6 = fopen ("Intermediaire2.txt", "r"); pointeur7 = fopen ("Intermediaire3.txt", "w"); while (fgets(tab1, 150, pointeur6) !=NULL) { if (tab1[0] == SpecialCharacter2) { fprintf (pointeur7, "%s", tab1); } } fclose (pointeur6); fclose (pointeur7); return; }
J'ai fait plusieurs tests et je me suis rendu compte que quand je ne fermais pas le pointeur 7 il n'y avait plus d'ereur de segmentation (mais çà ne résoud pas mon problème pour autant car si je ne ferme pas ce pointeur il est alors impossible de réutiliser le fichier vers lequel il pointe, ie Intermediaire3.txt, dans la suite du programme.
De même, si je met la boucle :
en commentaire alors il n'y a plus d'erreur de segmentation.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 while (fgets(tab1, 150, pointeur6) !=NULL) { if (tab1[0] == SpecialCharacter2) { fprintf (pointeur7, "%s", tab1); } }
Voilà, au vu de ce code et de l'exposition de mon problème pouvez-vous me dire d'où vient le souci ??
Je vous remercie par avance pour toute aide (car ça fait maintenant 2 jours que je bloque complètement sur çà).
Partager