Encore un défi pour les pro du C

wapin Messages postés 11 Date d'inscription   Statut Membre Dernière intervention   -  
ali_camarche Messages postés 31 Date d'inscription   Statut Membre Dernière intervention   -
Un nouveau pb pour les accroc au c:
nous essayons de faire une liste chainé qui a 2 type de valeur:
On doit entrer un entier étant le numéro de ligne et un tableau de caractere com étant
la ligne de commande.
Ex: 10 testdelignedecommande. 10 étant le num de ligne et testdelignedecommande la commande

la déclaration de structure de la liste chainé:

typedef struct commande
{ int no_ligne;
char ligne[COMMAND_MAX];
}commande;

typedef struct ARBRE {
commande valeur;
struct ARBRE *filsd;
}arbre;

Pour entrer des valeur a l'initialisation par exemple on fait:

void InitArbre(arbre *a){
a -> valeur.no_ligne = 20;
a -> valeur.ligne[COMMAND_MAX] = "r";
a -> filsd = NULL;
}


Ceci est un test pour vérifier si nos valeurs sont enregistré dans l'arbre.
lorsqu'on test, la valeur 20 est bien enregistré ds l'arbre mais pas "r".D'où le souci....
Il doit certainement y avoir un probleme d'adresse pour l'arbre.
Si vous avez une correction dans la syntaxe a me suggérer vous serez le bienvenue.
A+
PS:Merci pour ceux qui on répondu à mes précédent msg.
A voir également:

3 réponses

weblook
 
ta variable ligne est de type char donc 'r' et non "r"
0
Marden Messages postés 1072 Date d'inscription   Statut Membre Dernière intervention   210
 
"ligne" est une chaîne [un tableau] de caractères, donc utiliser "strcpy".
Quelle idée d'appeler "Arbre" ce qui n'est qu'une "liste chaînée" ?
Un conseil pour rendre les mécanismes d'accès réutilisables : séparer les données (ici de structure "commande") de la structure de stockage (ici liste chaînée) en remplaçant, dans cette dernière, la donnée par un pointeur !
0
ali_camarche Messages postés 31 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour

Pour moi je pense que tu as une fausse instruction qui est :
(a -> valeur.ligne[COMMAND_MAX] = "r";), dans ce cas wapin le "r"
sera ressu par la case "COMMAND_MAX" qui est un debordement car
l'indice de la derniere case de "ligne" est "COMMAND_MAX-1", alors je
te conseil de la remplace par :
a -> valeur.ligne = "r";

Salut, et bon courage.

Ali.
0