Quelques remarques :
1 2 3 4 5 6
| while (tableau=readdir(test)!=NULL)
{
tab[j]=tableau->d_name;
j++;
temp++;
} |
La condition sur le while doit être
while ((tableau=readdir(test))!=NULL)
readdir va réécrire la structure tableau et placer le nom suivant dans le même tableau (tableau->d_name) que le nom précédent. En conséquence, on ne peut pas se contenter de copier l'adresse de la chaîne(tableau->d_name) dans tab[j], ce sera toujours la même adresse et la chaîne sera la même pour tout le monde :ce sera le nom du dernier fichier. Pour chaque nouveau nom, il faut créer une nouvelle chaîne, copier dedans la chaîne tableau->d_name et mettre son adresse dans tab[j]. qq chose du genre :
1 2 3 4 5 6 7 8
| while ((tableau=readdir(test))!=NULL)
{
tab[j]= malloc(strlen(tableau->d_name)+1);
strcpy(tab[j],tableau->d_name);
j++;
temp++;
}
tab[j] = NULL; |
1 2
| while (fscanf(stdin,"%S",tabfich[j]))
{... |
tabfich est un tableau de pointeur (sur char) pas un tableau de char. On ne peut pas mettre dedans la chaîne entrée sur stdin. Le programme va planter. Accessoirement, je n'est pas compris le but de cette portion de code.
Important : débarrasse toi au plus vite de ces horribles variables globales qui n'ont pas lieu d'être et compliquent inutilement l'interprétation du code :
1 2 3 4 5 6 7 8 9 10 11 12
| void Lecture(char *dirname)
{
DIR * test;
struct dirent *tableau;
char *tab[10000]; // ATTENTION Tableau LOCAL
int j, temp;
.....
if ((test = opendir(dirname)) != NULL)
{
j = temp = 0;
while ((tableau=readdir(test))!=NULL)
....... |
Partager