Salut,

Le code de listes suivant marche seul, mais quand je le mets dans un autre programme il ne veut pas le compiler (liste.c: In function «ajout_tete":
liste.c:60: erreur: assignment makes pointer from integer without a cast
c'est la ligne p->val=strdup(e)

Que faire?

code du fichier liste.c :
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
 
#include "liste.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
 
void compl(char s[])
{
  int i,l;
  char temp[8][256]={0};
 
  l=0;
  while(s[l]!='\0')
    l++;
 
  for(i=0;i<256;i++)
    temp[l-1][i]=s[i];
  while(l!=8)
    {
      temp[l][0]='0';
      for(i=0;i<l;i++)
	{
	  temp[l][i+1]=temp[l-1][i];
	}
      l++;
    }
  for(i=0;i<256;i++)
    s[i]=temp[l-1][i];
 
  printf("%s\n" ,s);
}
 
 
 
 
 
 
 
int compare(ELEMENT e1, ELEMENT e2) { return strcmp(e1,e2); }
 
void affiche (ELEMENT* e) { printf("%s ",*e); }
 
Liste creer_liste(void)
{	return NULL;	/* la liste vide est representée par NULL	*/	
}
 
int est_vide(Liste L)
{	return !L;	/* la liste vide est representée par NULL	*/
}
 
void visualiser(Liste L)
{ Liste p;
  for (p=L; !est_vide(p); p=p->suiv) affiche(&p->val); 
  puts("");
}
 
Liste ajout_tete(ELEMENT e, Liste L)
{ Cell* p=(Cell*)malloc(sizeof(Cell));
  if (p==NULL) return NULL; 
  p->val=strdup(e);
  p->suiv=L;
  return p;
}
 
 
Liste ajout_queue(ELEMENT e, Liste L)
{ Liste c;
  Cell* p=(Cell*)malloc(sizeof(Cell)); 
  if (p==NULL) return NULL;
  if (est_vide(L)) return ajout_tete(e,L);
  else {
    for (c=L; !est_vide(c->suiv); c=c->suiv) ;
    p->val=strdup(e);    
    c->suiv=p;
    p->suiv=NULL;
   return L;
  } 
}
 
Liste ajouter(ELEMENT e, Liste L)
{ Liste p,c;
  if (est_vide(L) || compare(e,L->val)<0) return ajout_tete(e,L);
  for(c=L; !est_vide(c) && 
        !est_vide(c->suiv)&&
        compare(e,(c->suiv->val))>0;
      c=c->suiv) ;
  p= calloc(1,sizeof(Cell)); 
  p->val=strdup(e);
  p->suiv= c->suiv; 
  c->suiv=p;
  return L;
}
 
Liste supp_tete(Liste L)
{  if (!est_vide(L)) {Liste p;
     p=L->suiv;   
     free(L);      
     return p;
   }
   else return NULL;
}
 
 
Liste supprimer(ELEMENT e, Liste L)
{ Liste p, c;
  if( est_vide(L)) return NULL;
  if (!compare(e,L->val)) return supp_tete(L);
  for(p=L; !est_vide(p)&&  !est_vide(p->suiv) && compare(e,p->suiv->val);
      p=p->suiv) ;
  c=p->suiv; 
  p->suiv= c? c->suiv :NULL;
  free(c);
  return(L);
}
 
Liste rech(ELEMENT e, Liste L)
{ Liste p=L;
  while(!est_vide(p)&& 
        compare((p->val),e))
     p=p->suiv;
 
  return p;
}
code du fichier liste.h :
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
 
 
typedef char* ELEMENT;
struct cellule { 
   ELEMENT val;
   struct cellule * suiv;} ;
 
typedef struct cellule Cell;
typedef struct cellule * Liste;
 
 
int compare(ELEMENT e1, ELEMENT e2);
 
void affiche (ELEMENT* e);
 
Liste creer_liste(void);
int est_vide(Liste L);
void visualiser(Liste L);
Liste rech(ELEMENT e, Liste L);
Liste ajout_tete(ELEMENT e, Liste L);
Liste ajouter(ELEMENT e, Liste L);
Liste supp_tete(Liste L);
Liste supprimer(ELEMENT e, Liste L);
Liste ajout_placer(ELEMENT e, Liste L);
void compl(char s[]);