Pb allocation mémoire en C

cyberlulu -  
 cyberlulu -
Bonjour
j'ai un pb avec le programme que je suis en train d'ecrire. voilà le code :
typedef struct elem {char valeur;
                     struct elem * suivant;
                     } element;
typedef element * liste;

main()
{int i;
liste l[10];
liste temp;

temp=(element*)malloc(sizeof(liste));
temp->valeur='G';
temp->suivant=NULL;

for(i=0;i<=10;i++)
 {l[i]=(element*)malloc(sizeof(element));
  l[i]->suivant=NULL;}
  
  l[0]->valeur='0';
  printf("%s",&l[0]->valeur);
  
  
  getch();	
  return 0;
}

ce que je ne comprend pas, c'est quand j'alloue dans un premier tps de la mémoire ds temp, après il m'affiche 0 et plein de sigles à coté alors que je veux afficher seulement printf("%s",&l[0]->valeur);
pourtant quand j'enlève la partie avec temp, il n'y a aucun pb.
si qqun sait pourquoi il ne m'affiche pas juste '0', merci de m'expliquer pourquoi...

1 réponse

maily Messages postés 7556 Date d'inscription   Statut Contributeur Dernière intervention   453
 
Bonjour!

printf("%c",&l[0]->valeur);

C'est un caractère qui est dedans! pas une chaine!

Maily :-))))
ragondin, va au coin!
0
cyberlulu
 
oui je suis d'accord mais j'ai aussi essayé avec %c et ca me met un autre caractère que je n'ai pas du tt demandé ! c'est pour ca que j'ai mis %s... et ca ne marche tjs pas avec %c...
sinon en passant, pourquoi faut-il mettre &l[0]->valeur et pas l[0]->valeur tout court ??
0
cyberlulu
 
zut alors, excuse moi ! j'ai mis %c et l[0]->valeur et ca marche très bien...
merci bcp !
0
Ravachol Messages postés 566 Date d'inscription   Statut Membre Dernière intervention   120
 
Salut,
Il faut aussi enlever le & devant l[0]->valeur.

A++

C'est pas parce qu'ils sont nombreux à avoir tort
qu'ils ont raison! (COLUCHE)
0
Ravachol Messages postés 566 Date d'inscription   Statut Membre Dernière intervention   120
 
Trop tard :-)

C'est pas parce qu'ils sont nombreux à avoir tort
qu'ils ont raison! (COLUCHE)
0
cyberlulu > Ravachol Messages postés 566 Date d'inscription   Statut Membre Dernière intervention  
 
ok pour l'affichage, ca marche comme ca. mais le problème maintenant c'est quand je fais ca :
 while(t!=NULL)
 {strcpy(nb,&t->valeur);
  strncpy(chiffre,&nb[strlen(nb)-1],1);
  chiffre[1]='\0';
  printf("%s",chiffre);
  for(i=0;i<=15;i++)
   {if(strcmp(chiffre,tab[i]->valeur)==0)
     {tab[i]=ajouter_queue(tab[i],nb);}
   }
  t=t->suivant;
 }


avec t une liste défini comme dans le code plus haut.
donc pour extraire la dernière lettre d'un nombre, j'ai utilisé strncpy et j'ai donc une un seul caractère dans une chaine de caractère. le pb se pose à la condition if(strcmp(chiffre,tab[i]->valeur)==0)
0