Bonjour à tous.

Je bloque sur ce qui sera surement pour vous un détail.

Je m'explique, lors d'un ajout en tête ou en queue, j'aimerais insérer un maillon créé précédemment mais je n'y arrive pas.

Voici la structure qui sert pour la liste chaînée:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
typedef struct pile
{
  char nom_prog[20];
  char pseudo[20];
  char taille_fichier[20];
  char fichier[256];
  struct pile *prec;
}pile;
La fonction d'ajout en tête:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
void ajouter_tete(pile **MaPile, pile **m){
	pile *element = malloc (sizeof(pile)); //creation d'un nouveau chainon
 
	strcpy(element->pseudo,(*m)->pseudo);
	element->prec = *MaPile;
	*MaPile = element;
}
Pour charger la liste avec toutes les infos qui sont lues à partir d'un fichier:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
void charg_liste(pile **MaPile){
pile *m;
 
m= malloc (sizeof(pile));
m->prec = NULL;
 
/* puis les champs pseudos, taille_fichier,... sont renseignés */
 
ajouter_tete(MaPile,&m);
 
}
Et enfin le main:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
int main(void){
 
pile *MaPile = NULL;
 
charg_liste(&MaPile);
...
}
Ainsi, dans la fonction d'ajout en tête, je suis obligé de faire un strcpy pour renseigner tous les champs nécessaires (ici j'en ai mis qu'un). Et cela fonctionne comme cela. Sauf que du coup, j'ai créé un maillon intermédiaire et j'aurais aimé savoir comment me passer de ce maillon. J'ai vainement tenté de lui passer l'adresse directement mais ça merde.

Voici ce que j'ai tenté:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
void ajouter_tete(pile **MaPile, pile **m){
	(*m)->prec = *MaPile;
	*MaPile = *m;
}
Et voilà ma fonction d'affichage de la liste:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
void aff(pile **MaPile){
	pile *p;
	p = *MaPile;
	while(p!=NULL){
		printf("pseudo:\t%s\n",p->pseudo);
		p = p->prec;
	}
}
Dans le cas du strcpy, ça me retourne exactement ce qu'il faut. Mais quand je passe l'adresse, j'ai une boucle infinie qui affiche le pseudo en tête de liste uniquement.

Merci de votre aide et désolé si le post est un peu long, j'ai essayé d'être assez précis.

Dest.