Fonction ne compile pas !

Wizlee Messages postés 25 Statut Membre -  
[Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   -
void Dico()
{
 
    FILE* testeur=NULL;
    testeur=fopen("Dico.txt","r+");
    if(testeur==NULL)
    {
        printf("erreur de Fichier\n");
    }
    else
    {  
 
int NbrMot=10,Case=0 ,taille1=10, taille2=10;  
                 
        int caractere='e'; 
        char **MotCaches=NULL;
         
do
{          
                 
                MotCaches[Case]=malloc(taille2*sizeof(char));
                if(MotCaches[Case]==NULL)
                { printf("erreur de taille2\n\n");
                    exit(0);}
                else
                {
                                         
        /*                 
    int NumH=0;
    //=========== Nombre Aleatoir ===========
    srand(time(NULL));
    NumH=(rand()%(NbrMot-min+1))+min;
            printf("%d",NumH);
    //=======================================
    //printf("%s",MotCaches[NumH]);                
        */
                 
                char *MotCache1=NULL;
                 
                        int i=0;
                        do
                        {
                        caractere=fgetc( testeur );
                        i++;
                        }while( caractere != '\n' );
                int tailleDu1=i;
                             
                taille1=tailleDu1;
                                 
                MotCache1=malloc(taille1*sizeof(char));
                if(MotCache1==NULL)
                { printf("erreur de Taille1\n");
                    exit(0);}
                else
                {
                    do
                        {
                        fseek(testeur, -taille1, SEEK_CUR);
                        caractere=fgetc( testeur );
                        MotCache1[i]=caractere;
                        i++;
                    }while( caractere != '\n' );
 
                        printf( "%s",MotCache1 );
                        MotCaches[Case]=MotCache1;                               
                } free(MotCache1);
                        Case++;
     
                        int j=0;
                        do
                        {
                        caractere=fgetc( testeur );
                        j++;
                        }while( caractere != '\n' );
                     
                int tailleMSuiv=j;
                             
            taille2=tailleMSuiv;
            fseek(testeur,-taille2, SEEK_CUR);
         
             
            }
         
             
    }while( caractere != EOF );
    free(MotCaches);
    }
    fclose(testeur);
}


Mon But est de créer un Tableau de chaîne de Caractères...Merci d'avance !

2 réponses

  1. Tomsuper Messages postés 1921 Date d'inscription   Statut Membre Dernière intervention   407
     

    #include <stdlib.h>

    void free_tab(char **tab)
    {
    int i;

    i = 0;
    if (tab == NULL || tab[0] == '\0')
    return ;
    while (tab[i] != NULL)
    {
    free(tab[i]);
    i += 1;
    }
    free(tab);
    }

    char **tab(int x, int y)
    {
    int i;
    char **tab;

    i = 0;
    if (x >= 0 || y >= 0)
    return (NULL);
    if ((tab = malloc(sizeof(char *) * (x + 1))) == NULL)
    return (NULL);
    tab[x] = NULL;
    while (i < x)
    {
    if ((tab = malloc(sizeof(char *) * (y + 1))) == NULL)
    return (NULL);
    i += 1;
    }
    return (tab);
    }


    La fonction tab te permet de créer un "tableau' de string, avec x comme nombres de string, et y la taille fix d'un string.

    free_tab te permet, de libéré l’espace ton ton tableau
    0
  2. Tomsuper Messages postés 1921 Date d'inscription   Statut Membre Dernière intervention   407
     
    Re,

    J'ai pas mal de petites questions du style, à la ligne 15 y'a int caractere='e';

    Pourquoi un int pour un caractère ? un char suffit.

    Puis, comment tu compiles ? pourrions nous avoir le message d'erreur de la compilation ?

    Il est ou ta fonction main() ? tu l'appels comment ta fonction Dico ?

    Es tu aux courent que ta fonction Dico ne retourne rien ?

    As-tu mis les librairie pour fopen fseek etc... ?

    0
    1. [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   1 108
       
      Salut Tomsuper,

      Wizlee n'a pas encore répondu à tes questions et suggestions.

      Cela dit, juste une observation à propos de ta question et affirmation : "Pourquoi un int pour un caractère ? un char suffit."

      Le type de la variable
      int caractere;
      me paraît correct, car cette variable est utilisée pour recevoir le résultat de
      fgetc()
      qui retourne un
      int
      (ce prototype permet à cette fonction de pouvoir retourner
      EOF
      , qui, d'ailleurs est testé dans le code proposé par Wizlee, et qui, par définition, ne peut pas correspondre à une valeur valide pour un
      char
      ).

      http://www.cplusplus.com/reference/cstdio/fgetc/

      P.S. :
      Tomsuper, ton code ne s'affiche pas avec coloration syntaxique car tu as cliqué sur le bouton pour des balises de code génériques. Il faut utiliser la liste déroulante à côté de ce bouton et choisir le langage "c" pour insérer des balises <code c> </code> qui produiront l'effet recherché.
      0