Flux rss
Collection CommentÇaMarche.net
Rechercher : dans
Par :

Structure en c

lolo, le mercredi 29 mai 2002 à 17:22:10 
 Signaler ce message aux modérateurs

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

1

ariock, le mercredi 29 mai 2002 à 20:50:36

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)

Répondre à ariock

2

lolo, le jeudi 30 mai 2002 à 09:51:44

Merci de tes conseils
malhereusement ca ne marche pas
et je ne comprends vraiment pas pkoi.

Trop mal concu le c...
AAAAAAAAAAAAAAAAARRRRRRRRRRRRRRGGGGGGGGGGHHHHHHHHHHHHHHhh

Répondre à lolo

3

Ted, le jeudi 30 mai 2002 à 10:57:09

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 ...

Répondre à Ted

4

Ted, le jeudi 30 mai 2002 à 10:59:36

Zut !
c'est :
nouveau = (Noeud*)malloc( sizeof(Noeud) );

Répondre à Ted

5

lolo, le jeudi 30 mai 2002 à 11:00:04

C'est ce que j'ai deja fait

je pete un wattt la ca fait depui lundi que je sui la dessu

Répondre à lolo

6

Ted, le jeudi 30 mai 2002 à 11:15:20

Essaye de controler tes allocations , du style:
if(noeud = (noued*)malloc(size..) == NULL) {
printf("probleme")
return
else ...
kel est exament le message retourné par ton compilo ?

Répondre à Ted

7

lolo, le jeudi 30 mai 2002 à 11:29:52

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

Répondre à lolo

8

Ted, le jeudi 30 mai 2002 à 11:33:58

Enleve le 2nd mot Noeud de ta structure.
...}Noeud;
recompile avec les char*

Répondre à Ted

9

lolo, le jeudi 30 mai 2002 à 11:57:33

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

Répondre à lolo

10

Ted, le jeudi 30 mai 2002 à 12:55:20

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 ...

Répondre à Ted

11

lolo, le jeudi 30 mai 2002 à 13:30:03

Merci bcp de ton aide ted

Répondre à lolo

12

Ted, le jeudi 30 mai 2002 à 16:02:11

A ton service.

Répondre à Ted

13

lolo, le jeudi 30 mai 2002 à 16:28:29

RE ted le magicien, je commence peut etre a etre lourd mais j insiste

Mon pb maintenant est sur les pointeurs.
Le pointeur sur mon noeud de debut traduc est toujours null, il est modif que dans la fction modif par ces lignes
mais reprend null

definitTraduc(Noeud* traduc)
{
struct Noeud * nouveau;

printf("adr traduc %p\n", traduc);

/*nouveau bien initialiser(grace a toi :))*/
nouveau = (Noeud*)malloc(sizeof(Noeud));
initNoeud(nouveau);
setOrigine(nouveau , tmp[0]);
setTraduction(nouveau , tmp[LANGUE_CHOISIE]);

/*le pb commence ici*/
if (traduc == NULL)
{ /*si 1 er noeud*/
printf("traduc null\n");
traduc = nouveau ;
}
else /*si apres*/
ajouteNoeud(traduc , nouveau);


printf("adr %p et %p \n",nouveau, traduc);
}

L execution donne sa si j'appelle deux foi la fctiom:

adr traduc 0
traduc null
adr 27bc8 et 27bc8
adr traduc 0
traduc null
adr 277a8 et 277a8

et au final traduc est null dans le main

Kezako je modifie pourtant bien mon pointeur
Alors pkoi traduc reprends t il NULL?

Répondre à lolo

14

Ted, le jeudi 30 mai 2002 à 18:19:27

Je tavoue que je me suis un peu paumé dans ton prog.j'avais pas du tout fait le raprochement avec ton post sur progzone. je me disais que j'avais déja vue ca kelke par.je vais essaye de mieu comprendre, mais pour le traduc qui reste a NULL à premiere vue je vois pas pourkoi.tu fais pourtant bien l'initialisation
traduc = nouveau
. non franchement ?!? je pige pas
et moi j'ai pas de compilo sous la main donc c'est pas facile.
tin! le C c'est prise de tête parfoi mais ton probleme est interressant et puis on en resort toujours plus fort.
j'essairais de reposter.

Répondre à Ted

15

lolo, le vendredi 31 mai 2002 à 09:16:40

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.

Répondre à lolo

16

Ted, le vendredi 31 mai 2002 à 09:57:55

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.

Répondre à Ted

17

lolo, le vendredi 31 mai 2002 à 10:59:48

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

Répondre à lolo

18

Ted, le vendredi 31 mai 2002 à 11:23:30

Ouai j'ai oublie l'adresse :
no_name@club-internet.fr

Répondre à Ted

19

lolo, le vendredi 31 mai 2002 à 11:55:54

Si tu nas pas envie de filer ton adresse a tout le monde voici la mienne
e3lopez@etud.univ-ubs.fr

Répondre à lolo

20

 lolo, le vendredi 31 mai 2002 à 16:02:04

Les sources sont partis

Répondre à lolo
Les structures en langage C Différence entre une structure et un tableau Un tableau permet de regrouper des éléments de même type, c'est-à-dire codés sur le même nombre de bits et de la même façon. Toutefois, il est généralement utile de pouvoir rassembler des éléments de... www.commentcamarche.net/contents/c/cstruct.php3
Les structures en langage C++ Différence entre une structure et un tableau Un tableau permet de regrouper des éléments de même type, c'est-à-dire codés sur le même nombre de bits et de la même façon. Toutefois, il est généralement utile de pouvoir rassembler des éléments de... www.commentcamarche.net/contents/cpp/cppstruct.php3
Pointeur de structure dans fonction C (Résolu) Salut à tous, j'ai une fonction InsereDansListe rien de plus normal qui doit commme son nom l'indique inserer un pointeur vers un element dans une liste. Le probleme c'est que lorsque je passe un pointeur sur une liste vide ou même pleine et que... www.commentcamarche.net/forum/affich-2513913-pointeur-de-structure-dans-fonction-c
Les files en langage CLes files - Premier Entré Premier Sorti Requis I. INTRODUCTION II. Définition III. La construction du prototype d'un élément de la file IV. Opérations sur les files A. Initialisation B. Insertion d'un élément dans la file C. Oter un... www.commentcamarche.net/faq/sujet-8282-les-files-en-langage-c
Structure logique d'un disque durStructure logique d'un disque dur Introduction Lorsque vous utilisez votre ordinateur, vos données sont organisées sous forme de fichiers et de répertoires, selon une structure arborescente et ces éléments sont stockés sur votre disque dur. C'est... www.commentcamarche.net/faq/sujet-6034-structure-logique-d-un-disque-dur
3D Secure / Verified by Visa / SecureCode: Qu'est-ce que c'est ?Depuis octobre 2008, les banques et commerçants en ligne ont commencé à adopter le système 3DSecure pour les paiements sur Internet. Qu'est-ce que c'est ? 3DSecure est appellé "Verified by Visa" chez Visa, et "SecureCode" chez Mastercard. (Les... www.commentcamarche.net/faq/sujet-16311-3d-secure-verified-by-visa-securecode-qu-est-ce-que-c-est
Aide Structure en C (Résolu)Bonjour, voila g un gros prob d'allocation memoire pour un tableau double champ situé ds une sructure. G definit ma structure ds un fichier .h de la facon suivante : typedef struct image_N { int **tableau; }image_N image_N saisie( ); puis ds mon... www.commentcamarche.net/forum/affich-2463589-aide-structure-en-c
[C] declaration de struct (Résolu)bonjour, j'ai un souci avec ma déclaration de structure et je vois pas du tout où est mon erreur. Si quelqu'un pouvait m'aider svp je laisse le code. Merci typedef struct { fenetre_t wind ; char *item[] = {"item1", "item2", "item3", "item4"} ;... www.commentcamarche.net/forum/affich-5741631-c-declaration-de-struct
Langage C structure, pointeur et fonctionbonjour, j'ai actuellemnt un projet a rendre pour...demain (et oui dsle...) que j'ai essayer de coder avec des structures mais je pige pas comment on passes des pointeurs de structures en arguemnt de fonction. en fait les passer ça marche, dans la... www.commentcamarche.net/forum/affich-301388-langage-c-structure-pointeur-et-fonction
Télécharger Visual C++ 2008 ExpressVisual C++ Express est une version "gratuite" et allégée de Visual Studio ; l'utilisation requiert l'inscription sur le site de Microsoft. Cet environnement de développement permet de créer des application Win32 ou du .NET C. www.commentcamarche.net/telecharger/telecharger-34056350-visual-c-2008-express
Télécharger Dev-C++Dev-C++ est un environnement de développement intégré (IDE) en C/C++. Son compilateur est basé sur Mingw de GCC, mais il peut également être utilisé avec CygWin. www.commentcamarche.net/telecharger/telecharger-59-dev-c
Télécharger Labo de formation C#.NetLabo de formation C#.Net représente environ 200h de formation, sous forme d'ateliers comprenant des cours au format pdf, des TD, des TP (plus de 200 exemples, exercices, mini projets sont inclus avec leurs corrections, inclus aussi un QCM de... www.commentcamarche.net/telecharger/telecharger-34058224-labo-de-formation-c-net
Dream multimedia Dreambox DM 600 PVR DVB-CPort Common Interface: , Modulateur RF: , Nombre de prises Péritel (SCART) :1 st, Compatible Dolby Digital, Télétexte, Electronic Program Guide (EPG), Minuteur: , Type de récepteur:DVB-C, Twin Tuners:No, Nombre de cartes acceptées:1, Lecteu www.commentcamarche.net/guide/917028-dream-multimedia-dreambox-dm-600-pvr-dvb-c
C Technologies C-Pen 800C800 C, USB, Divers:Size 140x35x20 / Weight 85, Plateforme:PC, Profondeur Couleur : , Résolution optique Vertical: , Système d'exploitation:ARIPOS ™, Type: , Interface:USB, Format du scanner:A4, Résolution:0 dpi www.commentcamarche.net/guide/161244-c-technologies-c-pen-800c
F.C Manager 2006F . . C .C .C, Genre:Sports, Nb. de joueurs hors-ligne:1, Développeur:Codemasters www.commentcamarche.net/guide/639103-f-c-manager-2006
Langage C - Les structures conditionnellesQu'est-ce qu'une structure conditionnelle ? On appelle structure conditionnelle les instructions qui permettent de tester si une condition est vraie ou non. Ces structures conditionnelles peuvent être associées à des structures qui se répètent... www.commentcamarche.net/contents/c/ccond.php3
Langage C++ - Les types de donnéesLes types de données Les données manipulées en langage C++, comme en langage C, sont typées, c'est-à-dire que pour chaque donnée que l'on utilise (dans les variables par exemple) il faut préciser le type de donnée, ce qui permet de connaître... www.commentcamarche.net/contents/cpp/cpptype.php3
PHP - Structures conditionnellesQu'est-ce qu'une structure conditionnelle? On appelle structure conditionnelle les instructions qui permettent de tester si une condition est vraie ou non, c'est-à-dire si la valeur de son expression vaut 0 ou 1 (le PHP associe le mot clé true à 1... www.commentcamarche.net/contents/php/phpcond.php3