narjes86 | billgatesanonym a écrit :
1. Il est recommandé de toujours mettre un zéro binaire à la fin d'une chaîne de caractères. C'est notamment nécessaire quand on veut ensuite utiliser les fonctions strcmp(), strcpy(), etc.
Par exemple, ici, avant la ligne 25, il faudrait ajouter LL2[m] = '\0';
2. Attention à sizeof(). Si on l'utilise avec un pointeur, il renverra la taille d'un pointeur, et non pas la taille de la chaîne, comme on le souhaiteriat. Pour cela, il vaut mieux utiliser strlen(), mais c'est une fonction qui a besoin que la chaîne soit terminée par un zéro binaire.
|
merci de votre réponde
j'ai mis comme vous m'avez dit LL2[m] = '\0'; et j'ai remplacé le sizeof par strlen mais rien est changé.le calcule reste faux.
j'ai un petit souci,je pense que l'appel sucessive de fonction "compter_mot_identique" peut etre la cause.
dans le main j'appelle la fonction plusieurs fois et j'ajoute aussi que les chaine L1 et L2 passé en paramètre sont alloué dynamiquement dans le main.voila
Code :
- int main()
- {
- int compter_mot_identique(char*, char*,int ,int );
- int nb_foot=0,nb_cyclisme=0;
- char*ch1,*chaine;
- long lsize;
- int carac=0,i=0;
- char chemin[200];
- char repertoire[15]="D:\\dossier";
- DIR *rep= NULL;
- struct dirent *fichierLu= NULL;
- ......
- .......
- foot = fopen("foot.txt", "r" );
- if (NULL == foot)
- {
- printf("Impossible d'ouvrir le fichier de classe foot\n" );
- return 1;
- }
- fseek (foot, 0 , SEEK_END); // Obtient la taille du fichier
- lsize = ftell (foot);
- rewind (foot);
- ch1 = (char*) malloc (lsize * sizeof(char));
- carac = fgetc(foot);
- while (carac != EOF)
- {
- while ( carac != ' ' && carac != '\n' && carac !=EOF ) // On continue tant que fgetc n'a pas retourné EOF (fin de fichier)
- {
- ch1[i]= carac;
- i++;
- carac = fgetc(foot);
- }
- ch1[i]=' ';
- carac = fgetc(foot);
- i++;
- }
- longueur1=strlen(ch1);
- i=0;carac=0; lsize =0;
- fclose (foot);
- ..
- ....
- ....
- rep =opendir(repertoire);
- if (rep==NULL)
- printf("erreur" );
- fichierLu = readdir(rep);
- while( fichierLu!=NULL)
- {
- if (strcmp(fichierLu->d_name, "." ) != 0 && strcmp(fichierLu->d_name, ".." ) != 0)
- {
- sprintf(chemin, "%s\\%s", repertoire, fichierLu->d_name);
- fichier = fopen(chemin,"r" );
- if (NULL == fichier)
- {
- printf("Impossible d'ouvrir le fichier %s\n",fichierLu->d_name);
- return 1;
- }
- fseek (fichier, 0 , SEEK_END); // Obtient la taille du fichier
- lsize = ftell (fichier);
- rewind (fichier);
- chaine = (char*) malloc (lsize * sizeof(char));
- carac = fgetc(fichier);
- while (carac != EOF)
- {
- while ( carac != ' ' && carac != '\n' && carac !=EOF ) // On continue tant que fgetc n'a pas retourné EOF (fin de fichier)
- {
- chaine[i]= carac;
- i++;
- carac = fgetc(fichier);
- }
- chaine[i]=' ';
- carac = fgetc(fichier);
- i++;
- }
- longueur=strlen(chaine);;
-
- //appel de la fonction
- nb_foot=compter_mot_identique(chaine,ch1,longueur,longueur1);
- fclose (fichier);
- free(chaine);
- }
- fichierLu = readdir(rep);
- }
- free(ch1);
- if (closedir(rep)==-1)
- {
- printf("echec" );
- }
- return(0);
- }
|
|