Bonjour,
voir : http://c.developpez.com/faq/?page=fi...dir_list_POSIX
Ca serait mieux de tester le retour non NULL de opendir avant de continuer non ?
Bonjour,
voir : http://c.developpez.com/faq/?page=fi...dir_list_POSIX
Ca serait mieux de tester le retour non NULL de opendir avant de continuer non ?
Oui.
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 #include <stdio.h> #include <dirent.h> int main (void) { DIR *rep = opendir ("."); if (rep != NULL) { struct dirent *ent; while ((ent = readdir (rep)) != NULL) { printf ("%s\n", ent->d_name); } closedir (rep); } return 0; }
l'auteur (LFE) ne s'est pas connecté depuis le 30/04/2008.
Si quelqu'un d'autre peut apporter cette modification ?
Je trouve que le test de rep n'est pas vraiment nécessaire car si rep = NULL car on peut passer NULL à readdir et closedir si je ne me trompe.
Oui peut être mais je trouve plus propre de faire un test explicite mais si implicitement cela ne va pas planter.
De plus, c'est du code dans la FAQ, donc autant être clair avec les éventuels débutants qui liront ce code.
Raymond
Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi
CafuroCafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
e-verbeUn logiciel de conjugaison des verbes de la langue française.
Ma page personnelle sur DVP.
Dans l'exemple (mal écrit) du très officiel opengroup qui gère POSIX.1, le test est fait. D'autre part, rien dans la doc n'indique que le comportement est défini avec NULL. Il est donc indéfini.
http://www.opengroup.org/onlinepubs/...s/readdir.html
Je pense pas.
En tout cas chez moi ca produit une erreur de segmentation. Donc je suis plutot d'accord avec Emmanuel.
C'est d'ailleurs pour ca que j'ai fait ce post.
Petit test simple :
résultat :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 #include <sys/types.h> #include <dirent.h> #include <stdio.h> int main () { DIR *dir = NULL; readdir(dir); printf("OK \n"); return 0; }
Core was generated by `./test'.
Program terminated with signal 11, Segmentation fault.
[New process 7673]
#0 0xb7e22725 in readdir () from /lib/tls/i686/cmov/libc.so.6
(gdb) bt
#0 0xb7e22725 in readdir () from /lib/tls/i686/cmov/libc.so.6
#1 0x080483c7 in main ()
Partager