Bonjour, je voudrais trier dans l'ordre kexicographique les noms de fichiers de chaque répertoire avec la fonction qsort et la fonction strcmp pour comparer les chaînes. Comme je ne connais pas à l'avance la taille du répertoire j'utilise l'algorithme suivant:
1. Parcourir le répertoire pour compter le nombre de nb;
2. Allouer dynamiquement une table tE de char* de taille nb;
3. Reparcourir le répertoire en allouant dynamiquement pour chaque nom une chaîne de caractères dans laquelle le nom est copié et on je veux affecter l'adresse de cette chaînes aux entrées successives de la table tE;
4. trier la table avec qsort;
5. afficher la table tE


Voici mon avancement et j'aimerais que vous m'aidiez à le corriger:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
#include <sys/types.h>
#include <string.h>
/* Allocation de size octets, rend l'adrsse du bloc alloué, ou NULL*/
void* mallloc(size_t size);
/*Libération d'un bloc*/
void free (void *ptr);
 
void tri(char *rep)
{
	DIR *monrep;
	struct dirent *courant;
	int nb,i;
	char* tE;
		monrep = opendir(rep);
		if (monrep!=NULL) /*le répertoire existe*/
		{
			nb=0;
			courant = readdir(monrep); /*on lit le premier fichier du répertoire*/
 
			while (courant!=NULL)
			{
 
				nb=nb+1; /*On enregistre le nombre de noms*/
				courant = readdir(monrep);/*on va jusqu'au fichier suivant*/
			}
 
			tE=(char*) malloc(nb * sizeof(char)); /*On alloue un tableau de nb lignes
                                               de taille "char"*/
			courant = readdir(monrep);
			while (courant!=NULL)
			{
                  for (i=0;i < nb;i=i+1)
				{
				tE[i]=(*courant).d_name; /*on remplit chaque ligne du table tE du nom du fichier trouvé*/
				courant = readdir(monrep); /*on avance dans le répertoire jusqu'au fichier suivant*/
				}				
				free (tE);/*on libère le bloc pointé par tE*/
			}
			/*Phase de tri de tE*/
			qsort(tE,sizeof(char),nb,strcmp);
			/*Affichage de la table t*/
			for(i=0;i<nb;i=i+1)
				printf("Ligne%d:%s\n",i,tE[i]);
		}
		else
		{
			printf("erreur d'ouverture du repertoire");
		}
 
 
}
void main(int nbArgs,char *args[])
{
 		int a;
        tri(args[a]);
 
}
Merci par avance de toute aide !!

$ Kleer $