problème d'allocation du tableau

problème d'allocation du tableau - C - Programmation

Marsh Posté le 23-08-2009 à 09:53:26    

Bonjour,
 
Je voulais copier le contenu du fichier "exemple .txt" dans un tableau t.
t est un tableau de chaine de caractère. on ne sait pas en avance ta taille de tableau.
le fichier "exemple.txt":
lundi
mardi
mars
Avril
dimanche
 
Voici mon essai:

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. int allocation(int N) 
  5. {
  6. FILE *fp;
  7. char *t,s[100],attribut[32];
  8. int i,j;
  9. t = (char *) malloc(N*sizeof(char));
  10. if(t== NULL)
  11. {
  12. printf("probleme d'allocation\n" );
  13. exit(0);
  14. }
  15. fp=fopen("exemple.txt","r" );
  16. if (fp == NULL)
  17. {
  18. printf("impossible d'ouvrier le fichier\n" );
  19. exit(0);
  20. }
  21. rewind(fp);
  22. //copier le contenu du fichier dans le tableau
  23. for(i=0; i < N;i++)
  24.     {
  25.     fgets(s, 100, fp);
  26.         sscanf(s,"%s",attribut);
  27.     strcpy(t[i],attribut);
  28. }
  29.    
  30.      //affichage le contenu de tableau
  31.   for(j=0;j<N;j++)
  32.    printf("j=%d %s\n",j,t[j]);
  33.    fclose(fp);
  34.        return 0;
  35. }
  36. int main(void)
  37. {
  38. FILE *fp = NULL;
  39. char s[100];
  40. int N=0;
  41. fp=fopen("exemple.txt","r" );
  42. if (fp == NULL)
  43. {
  44. printf("impossible d'ouvrier le fichier\n" );
  45. exit(0);
  46. }
  47. while (fgets(s,100,fp)!= NULL)
  48. N++;
  49. fclose(fp);
  50. allocation(N);
  51.   return 0;
  52. }


 
 
Mais, l'exécution ne passe pas bien !!
 
Merci


Message édité par dimadima le 23-08-2009 à 10:13:16
Reply

Marsh Posté le 23-08-2009 à 09:53:26   

Reply

Marsh Posté le 23-08-2009 à 18:53:59    

Amusant comme on retrouve les mêmes problèmes dans divers forums.
Mais pourquoi avoir différents pseudos ???
 
Bon, t'as eu les réponses sur l'autre forum. t[i] est de type char et tu veux y copier une chaine. Déjà là ça chie.
 
Par ailleurs, tu lis le fichier pour compter le nb de lignes puis tu le relis pour remplir les datas. Tu pourrais éviter ce comptage et allouer/réallouer ta zone lors du remplissage...
 
Enfin tous ces exit() dans ta fonction on sent vraiment le truc pondu sans la moindre réflexion.


Message édité par Sve@r le 23-08-2009 à 18:55:36

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed