Je dois avec cette fonction mettre tous les mots de mon fichier dans un tableau alloué dynamiquement. JE me suis aidé dans de internet pour savoir comment parcourir le fichier. Or voilà. Lors de l'affichage du tableau par la suite, ça écrit bien les mots qui sont dans le fichier mais j'ai deux problèmes:
1) Des fois (pas tout le temps) le programme crash mais jamais au même endrot
2) A l'affichage, après certains mots, il y a des caractères en plus qui apparaissent
Voici mon code et je ne sais pas du tout d'où vient l'erreur.
char **load_lexicon(char *filename)
{
int nbrmot = lexicon_size(&filename);//calcul le nombre de mot du fichier
filename = fopen("francais.dict", "r");
char chaine[TAILLE_MAX];//taille de chaine max
int nblettre = 0;
char **tab = NULL;
int i = 0;
int y;
tab = (char**) malloc(nbrmot * sizeof(char*));
if(filename != NULL)
{
while(fgets(chaine, TAILLE_MAX, filename) != NULL) // On lit le fichier tant qu'on ne reçoit pas d'erreur (NULL)
{
nblettre = longueurChaineCaractere(chaine);//calcul le nombre de lettre dans une chaine
nblettre = nblettre - 1;
tab[i] = creerTab1D(nblettre);
for(y = 0 ; y <= nblettre-1 ; y++)
{
tab[i][y] = chaine[y];
}
i = i + 1;
}
fclose(filename);
}
return tab;
}
Tu devrais mettre ton code entre les balises </> (voir bouton : </> , édite ton message, ça sera mieux pour lire ton code. Sinon, selon l'IDE tu as un debugger de disponible qui te surlignera la ligne d'instruction fautive (tes erreurs dont tu nous parle). Quel IDE as-tu ?
Sinon, quelques remarques:
Dans l' header <string.h> , tu as la fonction strlen() qui renvoie le nombre de caractères d'un tableau de char.
Pour le for(y = 0 ; y <= nblettre - 1 ; y++) , si tu as une option de compilation récente comme std=c11 ou std=c99 tu peux faire : " for(unsigned int y = 0 ; y < nblettre - 1 ; y++) "
D'ailleus dans ce for la ligne suivante serait plus judicieuse je pense :
for( unsigned int y = 0 ; y < nblettre - 1 ; y++)
Car avec le for que tu as ecrit, tu écris sur la caractère '\0' qui détermine la fin de chaîne de caractère, donc le programme ne trouve pas la fin du tableau... et rajoute à la fin de ces mots les données qui suivent le tableau de char : ta fameuse erreur de lettres qui se rajoutent
@Lamouette20. : la fonction fopen() renvoie l'adresse d'une structure FILE. Normalement, ton programme ne devrait pas compiler, puisque tu lui assigne (à fopen) un pointeur sur char (= un tableau de char). Sinon pour le malloc à la ligne 19, ça ne sert à rien de caster malloc , c'est même déconseillé (cast = conversion d'un type vers un autre) , donc : tab = malloc(nbrmot * sizeof(char*));
N'oublies pas de libérer la mémoire à la fin du programme, par exemple. Vu que c'est un tableau en 2D, tu dois connaître le nombre d'éléments (les mots), pour libérer un à un les éléments de la dim2, puis libérer le tableau en dim1.
Créés ton propre sujet, au lieu de déterrer les viex sujets et utilises le bouton code </> du forum pour poster ton code ! (tu peux modifier ton post, lien modifier en haut à droite du post).
@MEROUANEMERIEM Bonjour, merci de ne pas déterrer d'ancien sujet. Créer le votre dans le respect des règles du forum à savoir qu'un message commence par des règles de politesses (un bonjour ou des salutations à la communauté et se termine par des remerciements par avance pour les futures réponses) un descriptif de votre problème et le code que vous avez écrit inséré sur le forum avec l'outil d'intégration de code soit le bouton code </>.
Avant de poster un message, vérifiez la date du sujet dans lequel vous comptiez intervenir.
Si le dernier message sur le sujet date de plus de deux mois, mieux vaut ne pas répondre. En effet, le déterrage d'un sujet nuit au bon fonctionnement du forum, et l'informatique pouvant grandement changer en quelques mois il n'est donc que rarement pertinent de déterrer un vieux sujet.
Au lieu de déterrer un sujet il est préférable :
soit de contacter directement le membre voulu par messagerie privée en cliquant sur son pseudonyme pour accéder à sa page profil, puis sur le lien "Ecrire un message"
soit de créer un nouveau sujet décrivant votre propre contexte
ne pas répondre à un déterrage et le signaler à la modération
Je ferme ce sujet. En cas de désaccord, me contacter par MP.
Mon site web de jeux SDL2 entre autres : https://www.ant01.fr
Mon site web de jeux SDL2 entre autres : https://www.ant01.fr