Posez votre question Signaler

Structure en c

lolo - Dernière réponse le 31 mai 2002 à 16:02
salut a tous

j' ai une structure du type Noeud

typedef struct Noeud{
char * traduction;
char * origine ;
struct Noeud * gauche ;
struct Noeud * droit;
} Noeud;

Dans une fonction ou je cree un nouveau noeud,
je n'arrive pas a initialiser les char*

Noeud * nouveau;
nouveau->origine = (char*)malloc( (sizeof(char)));

strcpy(nouveau->origine , tmp[0]);

nouveau->traduction = (char*)malloc(sizeof(char));

strcpy(nouveau->traduction , tmp[LANGUE_CHOISIE]);

Mon tableau de char * tmp n'est pas un probleme, il fonctionne tres bien.

Merci a tous
Lire la suite 

Structure en c »

20 réponses
Réponse
+0
moins plus
Simple, c'est pas sizeof(char) qu'il faut a l'initialisation, mais la taille maximale de ta chaine+1, donc ca devient:

#define MAXC 255

typedef struct Noeud{
char * traduction;
char * origine ;
struct Noeud * gauche ;
struct Noeud * droit;
} Noeud;

Noeud * nouveau;
nouveau->origine = (char*) malloc( MAXC);
/*vide le truc pour pas avoir de crasse, pas necessaire, mais utile si tu joue bcp avec tes chaines */
memset(nouveau->origine,0,MAXC);

strcpy(nouveau->origine , tmp[0]);

nouveau->traduction = (char*)malloc(MAXC);

strcpy(nouveau->traduction , tmp[LANGUE_CHOISIE]);


Bon mon define peut etre remplacer par sizeof(tmp[0]), mais ce que tu veux en faire... (pour enregistrer ds un fichier le define vient bien a point)
Ajouter un commentaire
Réponse
+0
moins plus
Merci de tes conseils
malhereusement ca ne marche pas
et je ne comprends vraiment pas pkoi.

Trop mal concu le c...
AAAAAAAAAAAAAAAAARRRRRRRRRRRRRRGGGGGGGGGGHHHHHHHHHHHHHHhh
Ajouter un commentaire
Réponse
+0
moins plus
peut-etre il te faut dabord allouer ta structure Noeud
Noeud * nouveau;
nouveau = (Noeud*)malloc( sizeof(char) );
ensuite tu peux :
nouveau->origine = (char*)malloc( (sizeof(char)));
enfin je pense ...
lolo - 30 mai 2002 à 11:29
jai chge ma sruct

#define MAXC 255

typedef struct Noeud{
char[MAXC] traduction;
char[MAXC] origine ;
struct Noeud * gauche ;
struct Noeud * droit;
} Noeud;

Ca a compile et maintenenat ca compile plus :(

noeud.h:7: parse error before `['
noeud.h:7: warning: no semicolon at end of struct or union
noeud.h:11: parse error before `}'
noeud.h:11: warning: data definition has no type or storage class

si je remet un char * pour origine et traduc sa recompile

Bizarre vous avez dit bizarre
Ted - 30 mai 2002 à 11:33
enleve le 2nd mot Noeud de ta structure.
...}Noeud;
recompile avec les char*
lolololo - 30 mai 2002 à 11:57
Mon pb de vient de lalloc mem de ma struct noeud

lorske j'alloue ma mem il y a cette erreur ki apparai

Bus erroné (vidage mémoire dans le fichier core)

Pourrais tu me l'expliker
Ajouter un commentaire
Réponse
+0
moins plus
je reprends :

struct Noeud {
char *traduction;
char *origine;
struct Noeud *gauche;
struct Noeud *droit;
};

struct Noeud *nouveau;
if( nouveau=(struct Noeud *)malloc(sizeof(struct Noeud))==NULL)
{
prinft("probleme d allocation memoire sur nouveau");
exit(1);
}
if( nouveau->origine = (char*)malloc( sizeof(char) ) == NULL)
{
prinft("probleme d allocation memoire sur nouveau->origine");
exit(1);
}

apres fe gaffe origine ne peut contenir kun seul caractere donc il faut pas de strcpy(machin ...
lolo - 31 mai 2002 à 09:16
ouais c'est clair que c'est casse couille le c.

Pour mon dernier pb je m'en suis sorti en creeant un noeud a l'origne avant d'appeller ma fct.

J'ai cru un moment que tout aller rouler Mais au que c'est bien le C, mon prog ne cree que trois ou quatre noeud (nb appel de ma fct)avant de me sortir une faute de segmentation.
Cela se produit quand j'alloue mon nouveau noeud.
nouveau = (Noeud*)malloc(sizeof(Noeud));
Je suis senser en creer une "infinite" noeud alors moi avant ras le bol du C de mes couilles.
Ted - 31 mai 2002 à 09:57
je ne sais pas dans kel cadre tu travailles si c'est pour toi, la fac, le boulot mais faudrait que tu m'envoie les sources de ton prog, si tu peut bien-sûr.(pas tout, seulement le pricipal avec le main)j'aurais une meilleure vue d'ensemble.
maintenant chui étonné ke personne d'autre t'es répondu, notamment sur les autres forum, parceque moi pas vraiment etre un crac en C.
lolo - 31 mai 2002 à 10:59
Je travaille pour un labo de recherche mais je peux t'envoyer mon code qui est sensee finir dans le domaine public.
Files moi ton adresse.
Tu excuseras la qualite pour le moment.
avec les pbs que j'ai eu c'est parti dans tousles sens.
Mais je vais ameliorer sa pour toi
Ajouter un commentaire
Réponse
+0
moins plus
ouai j'ai oublie l'adresse :
no_name@club-internet.fr
lolo - 31 mai 2002 à 11:55
Si tu nas pas envie de filer ton adresse a tout le monde voici la mienne
e3lopez@etud.univ-ubs.fr
lolo - 31 mai 2002 à 16:02
les sources sont partis
Ajouter un commentaire
Ce document intitulé « structure en c » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Réduire les coûts d'impression dans l'entreprise