liste chaine en c (truc de presque de basse)

liste chaine en c (truc de presque de basse) - C++ - Programmation

Marsh Posté le 22-11-2002 à 00:18:05    

struct soldat_elt {
 char *ident;
 enum tgrade grade;
 enum tspecialite specialite;
 int taux_err;
 struct soldat_elt *suivant;
 struct soldat_elt *precedent;
 };
typedef struct soldat_elt *liste_soldat;
 
 
 
liste_soldat inser_soldat(liste_soldat soldat) {
    liste_soldat pt_temp;
    pt_temp=(liste_soldat)malloc(sizeof(struct soldat_elt));
    printf("%s","entrer nom du soldat \n" );
    scanf("%s",pt_temp->ident);
    printf("%s","entrer grade: \n" );
    scanf("%u",pt_temp->grade);
    printf("%s"," entrer specialite: \n" );
    scanf("%u",pt_temp->specialite);
    pt_temp->suivant=NULL;
    pt_temp->precedent=NULL;
// on insere en tete de la liste
if (soldat == NULL) {
    return pt_temp;}
    else { soldat->precedent=pt_temp;
           pt_temp->suivant=soldat;
           
           return pt_temp;}  
}
avec la structure et la fonction suivante
je souhaite inserer 1 element ds 1 liste chaine et ...
ca marche pas.

Reply

Marsh Posté le 22-11-2002 à 00:18:05   

Reply

Marsh Posté le 22-11-2002 à 02:00:54    

Rends les choses plus faciles à ceux qui veulent t'aider en utilisant le bouton [C++] !
 

Code :
  1. printf("%s","entrer nom du soldat \n" );
  2. scanf("%s",pt_temp->ident);


Rien n'a été alloué pour char* ident: écrasement de mémoire.


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
Reply

Marsh Posté le 23-11-2002 à 01:25:26    

Ben oui, char *ident alloue juste de la place pour un pointeur vers un char mais ne reserve pas la place prise par cette chaine. Pour cela, il faut faire un :

Code :
  1. ident=(char*)malloc(sizeof(char)*nb_char);


Je te conseille de passer par une variable temporaire

Code :
  1. char tmp[80];
  2. printf("entrer nom du soldat\n" );
  3. gets(tmp);
  4. ident=(char*)malloc(sizeof(char)*(strlen(tmp)+1));
  5. strcpy(ident,tmp);


comme ca tu reserves que ce que tu as besoin  :D  
 
printf("%s","entrer nom du soldat \n" );  :heink:  
tu sais que printf("entrer nom du soldat \n" ); ça marche aussi


Message édité par zastaph le 23-11-2002 à 01:26:35

---------------
yo, nippon ichi
Reply

Marsh Posté le 23-11-2002 à 18:03:14    

Zastaph a écrit a écrit :

Beaucoup de choses...



 
 :jap: Tout à fait :jap:


---------------
Cyrix 5x86 120MHz, Tseng Labs ET4000/W32p VLB, Doom@45FPS <3
Reply

Marsh Posté le 24-11-2002 à 01:32:21    

darkstalker a écrit a écrit :

 
 
 :jap: Tout à fait :jap:  




 
 [:muse]  
 
ou, cé obn   [:rix]


---------------
yo, nippon ichi
Reply

Marsh Posté le 24-11-2002 à 15:39:17    

merci
de vos réponses

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed