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

  1. maily Messages postés 7560 Statut Contributeur 453
     
    Bonjour!

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

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

    Maily :-))))
    ragondin, va au coin!
    0
    1. 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
    2. cyberlulu
       
      zut alors, excuse moi ! j'ai mis %c et l[0]->valeur et ca marche très bien...
      merci bcp !
      0
    3. Ravachol Messages postés 568 Statut Membre 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
    4. Ravachol Messages postés 568 Statut Membre 120
       
      Trop tard :-)

      C'est pas parce qu'ils sont nombreux à avoir tort
      qu'ils ont raison! (COLUCHE)
      0
      1. cyberlulu > Ravachol Messages postés 568 Statut Membre
         
        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