Fonction ne compile pas !

Messages postés
15
Date d'inscription
lundi 15 janvier 2018
Statut
Membre
Dernière intervention
9 septembre 2019
- - Dernière réponse : [Dal]
Messages postés
5210
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
16 septembre 2019
- 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 !
Afficher la suite 

2 réponses

Messages postés
1492
Date d'inscription
mardi 24 mai 2011
Statut
Membre
Dernière intervention
17 septembre 2019
244
0
Merci

#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
Commenter la réponse de Tomsuper
Messages postés
1492
Date d'inscription
mardi 24 mai 2011
Statut
Membre
Dernière intervention
17 septembre 2019
244
0
Merci
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... ?

[Dal]
Messages postés
5210
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
16 septembre 2019
801 -
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é.
Commenter la réponse de Tomsuper