tu peut m'expliquer
Merci
Version imprimable
tu peut m'expliquer
Merci
tu as ecrit
je crois plutotCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 struct data { struct stat stat; char *file_name; }; { struct data *p_data = malloc ((argc - 1) * sizeof *p_data); ... for (i = ...) { stat(...); p_data[i].file_name = argv[i + 1]; }
p_data[i]->file_name=argv[i+1];
mais pas sur
[Quels sont les mots que tu ne comprends pas dans " Merci d'utiliser le bouton [Citer] en haut à droite."]
Tu devrais être sûr. Quel est le type de p_data[i] ?Citation:
Envoyé par melmouj
c'est un char
Non. Essaye encore.Citation:
Envoyé par melmouj
c'est du %s
Tu refroidis... %s n'est pas un type.Citation:
Envoyé par melmouj
Aide : Quel est le type de p_data ?
c'est un pointeur vers une structure de type data
Pas tout a fait. C'est type 'struct data *'.Citation:
Envoyé par melmouj
Ok. Donc quel est le type de *p_data (autre forme de p_data[0]) ?
*p_data represente les variables(membres de data) de struct data
Mmmm. C'est bien hésitant...Citation:
Envoyé par melmouj
*p_data est le premier objet (donc de rang 0 ou encore p_data[0]) du tableau pointé par p_data. Il est donc du type struct data.
Alors pour accéder à un élément d'un 'struct xxx', c'est . ou -> ?
Bonjour,
c'est . et pas ->
Merci Emmanuel
une question:
est ce qu'il faut construire le tableau stat càd
Code:
1
2 struct stat * sbuf=malloc((argc-1) * sizeof * sbuf);
Ben non. Lorsqu'on construit le tableau de struct data, chaque élément contient un struct stat. Pas besoin d'autre chose...Citation:
Envoyé par melmouj
car quand je fait
j'ai des warningsCode:
1
2
3
4
5
6
7
8
9
10
11
12
13 if (p_data != NULL) { int result=0; for(i=0; !result && i < nbr; i++) { result=stat(argv[i+1], p_data + i); p_data[i].file_name = argv[i + 1]; } ................
Et bien sûr, on est censé deviner lesquels...Citation:
Envoyé par melmouj
Code:result=stat(argv[i+1], &p_data[i].stat);
attend si j'ai bie compris c'est la meme chose que
Code:
1
2
3 result=stat(argv[i+1], p_data.stat +i);
Non. On veut l'adresse d'une structure qui se trouve dans un élément de tableau :Citation:
Envoyé par melmouj
tableau : p_data
élement de tableau : p_data[i]
structure : p_data[i].stat
adresse de la structure : &p_data[i].stat
il n'y a pas d'alternative (simple)
maintenant pour la fct de comparaison j'ai fait
par contre pour la taille je vois pas comment faire!Code:
1
2
3
4
5
6
7 int compar_size(const void * pt_a, const void * pt_b) { return strcmp( (*(data *)pt_a).file_name, (*(data *)pt_b).file_name); //return pt_sa->st_mtime - pt_sb->st_mtime; }
Bah, il suffit de refléchir un peu.Citation:
Envoyé par melmouj
Dans la fonction de comparaison, on reçoit l'adresse de 2 éléments du tableau. Comme le code est générique, ce sont des void const *, mais en réalité, quel est le type ?
Il suffit alors de définir deux pointeurs locaux de ce type et de les initialiser avec les valeurs reçues. Ensuite, il suffit de comparer (avec l'opérateur -) les valeus des tailles. Pour atteindre un élément, on utilise autant de fleches et de points que nécessaire...
Il faut rester simple et clair. Le code que tu as posté, c'est le contraire (et en plus, il manque des 'const'). Si tu le comprends, c'est bien et je me demande alors pourquoi tu poses la question pour la taille.
Si tu ne le comprends pas (genre pompage sauvage...), pose des questions.