Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1300 connectés 

  FORUM HardWare.fr
  Programmation
  C

  probleme de pointeur

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

probleme de pointeur

n°1265494
rabzouze
Posté le 13-12-2005 à 14:12:41  profilanswer
 

Bonjour à tous,
 
Je suis un débutant sur C et je dois extraire d'un fichier des élements que je dois ensuite  insérer dans une liste.
Le problème est que j'ai des soucis de pointeurs et je ne trouve pas l'erreur.
 
Voici mon code:
 

Code :
  1. struct element
  2. {
  3. char c;
  4. char *morse;
  5. struct element* suiv;
  6. };
  7. typedef struct element Element;
  8. typedef Element* Liste;
  9. boolean estVide(Liste l)
  10. {
  11. if (l=NULL) return vrai;
  12. else return faux;
  13. }
  14. void Ajouter_en_Fin(char c,char *m,Liste *l)
  15. {
  16. Liste p=NULL;
  17. Liste q=NULL;
  18. if (estVide(*l)==vrai)
  19. {
  20.  p= (Liste) malloc(sizeof(Element));
  21.  p->c=c;
  22.  p->morse=malloc(strlen(m));
  23.  strcpy(p->morse,m);
  24.  p->suiv=NULL;
  25.  *l=p;
  26. }
  27. else
  28. {
  29.  for(p=*l;p->suiv;p=p->suiv)
  30.  ;
  31.  q= (Liste) malloc(sizeof(Element));
  32.  q->c=c;
  33.  q->morse=malloc(strlen(m));
  34.  strcpy(q->morse,m);
  35.  q->suiv=NULL;
  36.  p->suiv=q;
  37. }
  38. }
  39. void Afficher_liste(Liste l)
  40. {
  41. while(l!=NULL)
  42. {
  43.  printf("Element : %c  %s\n",l->c,l->morse);
  44.  l=l->suiv;
  45. }
  46. }
  47. main()
  48. {
  49. FILE *fp;
  50. char c;
  51. char ligne[100];
  52. char car;
  53. int j;
  54. char *code;
  55. Liste l=NULL;
  56. fp=fopen(FICHIER,"r" );
  57. if(fp==NULL) printf("Fichier existe pas\n" );
  58. else
  59. {
  60.  c=fscanf(fp,"%c %s\n",&car,ligne);
  61.  while(c!=EOF)
  62.  {
  63.   j=strlen(ligne)+1;
  64.   code=(char*) malloc(sizeof(char)*j);
  65.   strcpy(code, ligne);
  66.   /***Travaille sur liste ****/
  67.   Ajouter_en_Fin(car,code,&l);
  68.   /***************************/
  69.   c=fscanf(fp,"%c %s\n",&car,ligne);
  70.  }
  71.  fclose(fp);
  72. }
  73. Afficher_liste(l);
  74. }


mood
Publicité
Posté le 13-12-2005 à 14:12:41  profilanswer
 

n°1265501
godbout
Génial.
Posté le 13-12-2005 à 14:16:23  profilanswer
 

C'est quoi ton soucis de pointeur ?
Ca plante où ?

n°1265505
chrisbk
-
Posté le 13-12-2005 à 14:18:01  profilanswer
 

bin la, dans le code, tu vois pas ?

n°1265507
Sve@r
Posté le 13-12-2005 à 14:19:37  profilanswer
 

rabzouze a écrit :

Bonjour à tous,
 
Je suis un débutant sur C et je dois extraire d'un fichier des élements que je dois ensuite  insérer dans une liste.
Le problème est que j'ai des soucis de pointeurs et je ne trouve pas l'erreur.
 
Voici mon code:
 

Code :
  1. struct element
  2. {
  3. char c;
  4. char *morse;
  5. struct element* suiv;
  6. };
  7. typedef struct element Element;
  8. typedef Element* Liste;



Essaye, pour faciliter la relecture, de nommer tes types "t_qqchose" ou "qqchose_t" (comme c'est déjà fait dans les headers officiels)

rabzouze a écrit :


Code :
  1. boolean estVide(Liste l)
  2. {
  3. if (l=NULL) return vrai;
  4. else return faux;
  5. }



 
Si j'analyse bien ton idée, tu devrais plutôt écrire "if (l == NULL)" [:aloy]


Message édité par Sve@r le 13-12-2005 à 14:20:17

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1265508
rabzouze
Posté le 13-12-2005 à 14:19:38  profilanswer
 

Nan , je ne comprend pas pourquoi j'ai toujour l'erreur "Segmentation fault".
J'ai fait comme il fallait faire enfin je pense

n°1265512
Sve@r
Posté le 13-12-2005 à 14:21:43  profilanswer
 

rabzouze a écrit :

Nan , je ne comprend pas pourquoi j'ai toujour l'erreur "Segmentation fault".
J'ai fait comme il fallait faire enfin je pense


 
Erreur de débutant ! Ecrire "if (a=b)"  au lieu de "if (a == b)" !!!
Ta fonction "estVide()" met à null tous les pointeurs qu'elle reçoit !!!


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1265530
godbout
Génial.
Posté le 13-12-2005 à 14:32:42  profilanswer
 

chrisbk a écrit :

bin la, dans le code, tu vois pas ?


Bon, oui, effectivement, y a déjà au moins une erreur [:ocube]
Mais avec un p'tit débug ça pourrait déjà mieux m'avancer [:itm]

n°1265540
rabzouze
Posté le 13-12-2005 à 14:37:16  profilanswer
 

Merci les gars c'etait bien cela l'erreur toiut va bien maintenant. Merci encore

n°1265547
godbout
Génial.
Posté le 13-12-2005 à 14:42:17  profilanswer
 

Je suis une fille.

n°1265556
chrisbk
-
Posté le 13-12-2005 à 14:52:19  profilanswer
 

moi aussi, mais mieux.

mood
Publicité
Posté le 13-12-2005 à 14:52:19  profilanswer
 

n°1265558
rabzouze
Posté le 13-12-2005 à 14:52:49  profilanswer
 

dsl Ben merci Mademoiselle.
Mais j'ai un autre soucis est ce que je dois faire ceci:
 
 q->morse=malloc(strlen(m));  
 
ou bien ceci
 
 q->morse=malloc(strlen(m)+1);
pour '\0'

n°1265568
Trap D
Posté le 13-12-2005 à 15:00:35  profilanswer
 

Il faut te donner la réponse sur quel forum ? ici ou sur DVP ???

n°1265577
rabzouze
Posté le 13-12-2005 à 15:06:15  profilanswer
 

Ca ira tu ma bien aidé j t'en remercie beaucoup

n°1265597
Sve@r
Posté le 13-12-2005 à 15:18:00  profilanswer
 

rabzouze a écrit :

Mais j'ai un autre soucis est ce que je dois faire ceci:
 
 q->morse=malloc(strlen(m));  
 
ou bien ceci
 
 q->morse=malloc(strlen(m)+1);
pour '\0'


 
malloc alloue la mémoire que tu lui demandes et rien d'autre. On n'appelle pas malloc que pour des chaînes donc il n'y a aucune raison que malloc alloue un octet de plus que demandé.
 
Tu sais que tu dois gérer "n" caractères plus un '\0' pour marquer la fin de la chaîne... à toi de faire ce qu'il faut pour avoir suffisemment de mémoire...

n°1265984
Emmanuel D​elahaye
C is a sharp tool
Posté le 13-12-2005 à 22:39:09  profilanswer
 

rabzouze a écrit :

Bonjour à tous,
 
Je suis un débutant sur C et je dois extraire d'un fichier des élements que je dois ensuite  insérer dans une liste.
Le problème est que j'ai des soucis de pointeurs et je ne trouve pas l'erreur.
 
Voici mon code:


Compile pas...

Code :
  1. Compiling: main.c
  2. main.c:11: error: syntax error before "estVide"
  3. main.c:12: warning: return type defaults to `int'
  4. main.c:12: warning: no previous prototype for 'estVide'
  5. main.c: In function `estVide':
  6. main.c:13: error: `NULL' undeclared (first use in this function)
  7. main.c:13: error: (Each undeclared identifier is reported only once
  8. main.c:13: error: for each function it appears in.)
  9. main.c:13: error: `vrai' undeclared (first use in this function)
  10. main.c:14: error: `faux' undeclared (first use in this function)
  11. main.c: At top level:
  12. main.c:18: warning: no previous prototype for 'Ajouter_en_Fin'
  13. main.c: In function `Ajouter_en_Fin':
  14. main.c:19: error: `NULL' undeclared (first use in this function)
  15. main.c:22: error: `vrai' undeclared (first use in this function)
  16. main.c:24: error: implicit declaration of function `malloc'
  17. main.c:24: warning: nested extern declaration of `malloc'
  18. <internal>:0: warning: redundant redeclaration of 'malloc'
  19. main.c:26: error: implicit declaration of function `strlen'
  20. main.c:26: warning: nested extern declaration of `strlen'
  21. <internal>:0: warning: redundant redeclaration of 'strlen'
  22. main.c:27: error: implicit declaration of function `strcpy'
  23. main.c:27: warning: nested extern declaration of `strcpy'
  24. <internal>:0: warning: redundant redeclaration of 'strcpy'
  25. main.c:36: warning: nested extern declaration of `malloc'
  26. <internal>:0: warning: redundant redeclaration of 'malloc'
  27. main.c:38: warning: nested extern declaration of `strlen'
  28. <internal>:0: warning: redundant redeclaration of 'strlen'
  29. main.c:39: warning: nested extern declaration of `strcpy'
  30. <internal>:0: warning: redundant redeclaration of 'strcpy'
  31. main.c: At top level:
  32. main.c:47: warning: no previous prototype for 'Afficher_liste'
  33. main.c: In function `Afficher_liste':
  34. main.c:48: error: `NULL' undeclared (first use in this function)
  35. main.c:50: error: implicit declaration of function `printf'
  36. main.c:50: warning: nested extern declaration of `printf'
  37. <internal>:0: warning: redundant redeclaration of 'printf'
  38. main.c: At top level:
  39. main.c:56: warning: return type defaults to `int'
  40. main.c: In function `main_':
  41. main.c:57: error: `FILE' undeclared (first use in this function)
  42. main.c:57: error: `fp' undeclared (first use in this function)
  43. main.c:66: error: `NULL' undeclared (first use in this function)
  44. main.c:69: error: implicit declaration of function `fopen'
  45. main.c:69: warning: nested extern declaration of `fopen'
  46. main.c:69: error: `FICHIER' undeclared (first use in this function)
  47. main.c:70: warning: nested extern declaration of `printf'
  48. <internal>:0: warning: redundant redeclaration of 'printf'
  49. main.c:74: error: implicit declaration of function `fscanf'
  50. main.c:74: warning: nested extern declaration of `fscanf'
  51. <internal>:0: warning: redundant redeclaration of 'fscanf'
  52. main.c:75: error: `EOF' undeclared (first use in this function)
  53. main.c:77: warning: nested extern declaration of `strlen'
  54. <internal>:0: warning: redundant redeclaration of 'strlen'
  55. main.c:78: warning: nested extern declaration of `malloc'
  56. <internal>:0: warning: redundant redeclaration of 'malloc'
  57. main.c:79: warning: nested extern declaration of `strcpy'
  58. <internal>:0: warning: redundant redeclaration of 'strcpy'
  59. main.c:82: warning: passing arg 1 of `Ajouter_en_Fin' with different width due to prototype
  60. main.c:87: error: implicit declaration of function `fclose'
  61. main.c:87: warning: nested extern declaration of `fclose'
  62. Process terminated with status 1 (0 minutes, 0 seconds)
  63. 21 errors, 20 warnings



---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  probleme de pointeur

 

Sujets relatifs
probleme de pointeurProblème avec pointeur dans une structure
Problème de typage de pointeur de pointeur[MFC/VC++] Problème de pointeur
problème de pointeur sur fonction[C] problème de pointeur
probleme pointeur void alors qu'un cast de char* marche :\probleme avec pointeur sur objet
Problème de pointeur... (oui, je sais.)[C] Liste chaînée / pointeur : problème !
Plus de sujets relatifs à : probleme de pointeur


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR