Pb allocation mémoire en C

Fermé
cyberlulu - 29 déc. 2004 à 10:47
 cyberlulu - 29 déc. 2004 à 13:15
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 lundi 26 juin 2000 Statut Contributeur Dernière intervention 23 juin 2023 453
29 déc. 2004 à 12:10
Bonjour!

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

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

Maily :-))))
ragondin, va au coin!
0
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
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 560 Date d'inscription vendredi 5 mars 2004 Statut Membre Dernière intervention 30 octobre 2005 120
29 déc. 2004 à 12:31
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 560 Date d'inscription vendredi 5 mars 2004 Statut Membre Dernière intervention 30 octobre 2005 120
29 déc. 2004 à 12:32
Trop tard :-)

C'est pas parce qu'ils sont nombreux à avoir tort
qu'ils ont raison! (COLUCHE)
0
cyberlulu > Ravachol Messages postés 560 Date d'inscription vendredi 5 mars 2004 Statut Membre Dernière intervention 30 octobre 2005
29 déc. 2004 à 13:15
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