Fonction ne compile pas !

Fermé
Wizlee Messages postés 20 Date d'inscription lundi 15 janvier 2018 Statut Membre Dernière intervention 25 décembre 2019 - 9 sept. 2019 à 14:36
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 - 9 sept. 2019 à 18:45
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 !
A voir également:

2 réponses

Tomsuper Messages postés 1926 Date d'inscription mardi 24 mai 2011 Statut Membre Dernière intervention 19 août 2020 356
9 sept. 2019 à 15:51

#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
Tomsuper Messages postés 1926 Date d'inscription mardi 24 mai 2011 Statut Membre Dernière intervention 19 août 2020 356
Modifié le 9 sept. 2019 à 16:00
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
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
Modifié le 9 sept. 2019 à 18:56
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