copier le contenue d'un fichier dans un tableau

copier le contenue d'un fichier dans un tableau - C - Programmation

Marsh Posté le 08-12-2013 à 00:12:42    

bonjour
s'il vous plait je suis entrain de coder un programme qui tend à lire le contenue d'un fichier et le copier dans un tableau mais je suis bloquée
dans cette partie de code  
//remplissage du tableau
         FILE *fichier=NULL;
        char chaine[100];
        int dimension,int i;
        char *tab[100];
         fichier = fopen("easyin.txt", "r" );
           i=0;
           do
           {
       if  (fgets(chaine, 100, fichier) != NULL)  
        {  
                           
            strcpy(*(tab+i),chaine);
            i++;
        }  
        }
        while(i>(dimension-1));
 
 
merci d'avance

Reply

Marsh Posté le 08-12-2013 à 00:12:42   

Reply

Marsh Posté le 08-12-2013 à 10:38:22    

Déjà, Dimension n'est pas initialisé, donc ta boucle risque de prendre un certain temps.
 
Ensuite, ton tab est un pointeur sur tableau de char, et n'est pas initialisé non plus.
Dans ta copie, tu décale que d'une case dans tab, donc tu écrasera les anciennes lettres..
 
Il faut commencer par allouer ton tab, comme tu ne connais pas la taille du fichier, fais juste un pointeur que tu ré-allouera.  
 

Code :
  1. //remplissage du tableau
  2. FILE *fichier=NULL;
  3. char chaine[100];
  4. int i = 0;
  5. char *tab = NULL;
  6. int taille = 0;
  7. fichier = fopen("easyin.txt", "r" );
  8. while (true)
  9. {
  10. if  (fgets(chaine, 100, fichier) != NULL) 
  11.                 // On calcule la nouvelle taille (ancienne taille + taille de la chaine à ajouter)
  12.  int Len = strlen(chaine);
  13.  taille += Len;
  14.  // Allocation si tab est NULL, sinon ré-allocation
  15.  if (tab == NULL)
  16.   tab = (char*)malloc( taille );
  17.  else
  18.   tab = (char*)realloc( tab, taille );
  19.                 // Le décalage sera toujours de 100 caractères,puisque c'est uniquement à la fin du fichier que tu pourras avoir taille de chaine < 100.
  20.  strcpy( tab + i*100 ,chaine);
  21.  i++;
  22. }
  23. else
  24.  break;
  25. }


---------------
Perhaps you don't deserve to breathe
Reply

Marsh Posté le 08-12-2013 à 12:09:56    

merci :) j'ai corrigé mon code mais après le remplissage de tableau de caractére  le code se bloque voici le code corrigé  
 
 const char *stock;
        char **tab;
        tab= (char**)malloc(dimension*sizeof(char*));
        int dimension;
        int i,l,k,n,x,a,j,p;
        char chaine[1000];
            //remplissage du tableau
         fichier = fopen("easyin.txt", "r" );
           i=0;
           
       if (fichier == NULL)
    {
        printf("Impossible to open the file\n" );
        exit(42);
    }  
                          while (dimension >= 0){
                          stock= fgets(chaine, 1000, fichier);
                          tab[i] = (char*)malloc((strlen(stock)+1)*sizeof(char));
                          strcpy(tab[i],stock);
                          --dimension;
                          printf("%s",tab[i]);
                         i++;
            }
              fclose(fichier);
     
             

Reply

Sujets relatifs:

Leave a Replay

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