Pb chaine de caractères ds liste chainée en C

Fermé
cyberlulu - 30 déc. 2004 à 15:41
maily
Messages postés
7554
Date d'inscription
lundi 26 juin 2000
Statut
Contributeur
Dernière intervention
13 août 2018
- 30 déc. 2004 à 17:03
Bonjour
comment faire pour copier une chaine de caractère dans la valeur d'un élément d'une liste chainée ? j'ai utilisé strcpy mais j'ai un pb quand je rentre plus de 4 caractères : il ne m'en affiche que 4 !
voilà mon code :

typedef struct elem {char valeur;
                    struct elem * suivant;
                    } element;

typedef element * liste;
liste l=NULL;
main()
{ char nb[]="1515695";

  l=(element*)malloc(sizeof(element));
  strcpy(&l->valeur,nb);
  l->suivant=NULL;

  printf("%s",nb);
  printf("\n%s",&l->valeur);

  getch();
  return 0;
}

si on essaye ce code, l'affichage de l->valeur donnera "1515"
si qqun peut m'aider... merci d'avance

1 réponse

maily
Messages postés
7554
Date d'inscription
lundi 26 juin 2000
Statut
Contributeur
Dernière intervention
13 août 2018
451
30 déc. 2004 à 15:47
Bonjour!

Euh, tu copies une chaine de caractère dans UN caractère? C'est de là d'où vient le problème!

typedef struct elem {char * valeur;
                    struct elem * suivant;
                    } element;


et après:

l=(element*)malloc(sizeof(element));
 l = (char*) malloc (sizeof(nb));
  strcpy(&l->valeur,nb);
  l->suivant=NULL;





Maily :-))))
ragondin, va au coin!
0
euh... ben ouais ca marche plutot bien !!
mais je ne comprends pas trop pourquoi il faut faire comme ca...
déjà, pourquoi il faut mettre
typedef struct elem {char * valeur;
ca veut dire que le champ valeur est un pointeur sur un caractère ?? pourtant la valeur c'est un caractère, nan ?

et puis
l = (char*) malloc (sizeof(nb));
pourquoi on fait ca si on a déjà mis
l=(element*)malloc(sizeof(element));
. comment ca se fait que l'on fait deux fois malloc et qu'on enregistre dans l ?
0
ah oui, autre chose encore. on ne peut pas mettre dans le champ valeur une chaine de caractère ?? est-ce que c'est pour ca que tu mets char * valeur ?
0
maily
Messages postés
7554
Date d'inscription
lundi 26 juin 2000
Statut
Contributeur
Dernière intervention
13 août 2018
451
30 déc. 2004 à 16:26
Pardon, je me suis trompée:

l->valeur=(char*)malloc(sizeof(nb))

En fait, là, tu donnes à ta valeur, la taille de ton tableau!

Le char * veut dire que tu crée un pointeur sur un caractère! En faisant un malloc derrière de la taille de ton nb, par exemple, c'est comme si tu créais un tableau de caractères! Sauf que c'est dynamique...

Si tu ne mets pas char * valeur, et bien, cela veut dire que quoiqu'il se passe, ta valeur sera toujours un seul caractère. Un char * valeur permet de dire que ça peut être un ou plusieurs caractères...
En fait, regarde un cour sur les chaines de caractères en c, tu comprendras mieux parce que je ne pense pas bien l'expliquer! :( désolée...

Maily :-))))
ragondin, va au coin!
0
cyberlulu > maily
Messages postés
7554
Date d'inscription
lundi 26 juin 2000
Statut
Contributeur
Dernière intervention
13 août 2018

30 déc. 2004 à 16:37
si si j'ai bien compris ! c'était juste le fait de mettre deux fois l=...malloc... mais vu que le deuxième c'est l->valeur=... c'est bon. merci pour les explications !
0
maily
Messages postés
7554
Date d'inscription
lundi 26 juin 2000
Statut
Contributeur
Dernière intervention
13 août 2018
451 > maily
Messages postés
7554
Date d'inscription
lundi 26 juin 2000
Statut
Contributeur
Dernière intervention
13 août 2018

30 déc. 2004 à 17:03
:-D
De rien!

Maily :-))))
ragondin, va au coin!
0