Bonjour,

à la compilation de ce programme, j'ai ces erreurs :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
couple.c: In function `Couple':
couple.c:95: error: incompatible type for argument 1 of `strcpy'
couple.c:105: error: incompatible type for argument 1 of `strcpy'
couple.c:120: error: incompatible types in assignment
couple.c:121: error: incompatible types in assignment
couple.c: In function `main':
couple.c:138: error: invalid operands to binary !=
couple.c:138: error: invalid operands to binary !=
couple.c:139: warning: format argument is not a pointer (arg 2)
couple.c:139: warning: format argument is not a pointer (arg 3)
Merci


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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
 
#define F "voisin"
 
//Fonction qui avant tant qu'elle ne lit pas '\n' ou EOF 
void purge(FILE *fp)
{
  int c;
  while ((c = fgetc(fp)) != '\n' && c != EOF)
    {
    }
}
 
//Fonction qui remplace '\n' par 0
void clean (char *s, FILE *fp)
{
  /* Cherche ... */
  char *p = strchr (s, '\n');
  if (p != NULL)
    {
      /* ... supprime */
      *p = 0;
    }
  else
    {
      purge (fp);
    }
}
 
typedef struct{
  unsigned char x[4];
}t_ip;
 
typedef struct {
  t_ip ip1;
  t_ip ip2;
} t_couple;
 
 
 
 
//Fonction qui rcupre les couples de valeur en lisant un fichier
t_couple *Couple(FILE *fp)
{
  int nb = 0                //nb element du tableau 
    ,size = 5;             //taille du tableau
  t_couple *tabCouple;     // tableau qui recupere les couples
  tabCouple = (t_couple*)malloc (size * sizeof(t_couple));
  if(tabCouple == NULL)
    {
      perror("erreur allocation\n");
      return NULL;
    }
 
  if (fp == NULL)
    {
      perror(F);
      return NULL;
    }
  char line[BUFSIZ];
 
  while(fgets(line, sizeof line, fp) != NULL)
    {
      clean(line, fp);  // on supprime '\n'
      char *p = strtok(line,",");      //p contient la 1ere IP
      if (p != NULL)
	{
	  char *p1 = strtok(NULL,"\0");  //p1 contient la 2e IP
 
	  if(nb == size) //si tableau trop petit
	    {
	      size += 16;
 
	      //on augmente le taille
	      tabCouple = realloc(tabCouple, size * sizeof(t_couple));
	      if (tabCouple == NULL)
		{
		  perror("erreur allocation\n");
		  free(tabCouple); tabCouple = NULL;
		  return tabCouple;
		}
	    }
	  /*
	  //on insere la 1ere valeur du couple
	  tabCouple[nb].ip1 = malloc((strlen(p)+1) * sizeof(t_couple));
	  if (tabCouple[nb].ip1 == NULL)
	  {
	      perror("erreur allocation\n");
	      free(tabCouple); tabCouple = NULL;
	      return tabCouple;
	      }*/
	  strcpy(tabCouple[nb].ip1,p);
	  /*
	  //on insere la 2d valeur du couple
	  tabCouple[nb].ip2 = malloc((strlen(p1)+1) * sizeof(t_couple));
	  if (tabCouple[nb].ip2 == NULL)
	    {
	      perror("erreur allocation\n");
	      free(tabCouple); tabCouple = NULL;
	      return tabCouple;
	      }*/
	  strcpy(tabCouple[nb].ip2,p1);
 
	  nb++;// on incremente le compteur nb element reel
	}
      else
	{
	  printf ("format error\n");
	  break;
	}
      // on ferme le fichier
      fclose (fp), fp = NULL;
    }
  assert (fp == NULL);
 
  //on met  NULL pour avoir un marqueur de fin de tableau
    tabCouple[nb].ip1 = NULL;
    tabCouple[nb].ip2 = NULL;
 
  return tabCouple;
}
 
 
int main(void)
{
  int i;                             //Indice de boucle
  FILE * file = fopen("voisin","r");  //Fichier  lire
  t_couple *tabCouple = Couple(file);
  if(tabCouple == NULL)
    {
      perror("erreur\n");
      exit(1);
    }
  //Parcours du tableau de couple
  for(i=0; tabCouple[i].ip1!=NULL && tabCouple[i].ip2!=NULL; i++)
    printf("Couple : %s et %s\n", tabCouple[i].ip1, tabCouple[i].ip2);
 
  //fin du pgm
  return 0;
}