Pb allocation mémoire en C

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. Contributeur
    Bonjour!

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

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

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

      C'est pas parce qu'ils sont nombreux à avoir tort
      qu'ils ont raison! (COLUCHE)
      0
    5. @Ravacholok 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