[C] Problème avec une fonction récursive

Problème avec une fonction récursive [C] - C - Programmation

Marsh Posté le 03-11-2007 à 11:50:07    

Bonjour,
je me suis remis au c récemment et la je butte sur un problème :
dans un premier temps je souhaite parcours un dossier et ses sous-dossiers à la recherche de certains fichiers qui par la suite exécuteront des actions. J'utilise pour cela une fonction readdir_rec récursive qui lis chaque sous dossier qu'il trouve et m'affiche cela à l'écran pour l'instant.
Seulement ca ne marche pas !
Plus étonnant quand j'affiche le paramètre dossier, il change après l'appel à sprintf je ne comprend pas pourquoi ?
Est-ce que quelqu'un voit mon problème ??

Code :
  1. #include <cstdlib>
  2. #include <iostream>
  3. #include <stdio.h>
  4. #include <dirent.h>
  5. #include <errno.h>
  6. #include <string.h>
  7. #include <sys/types.h>
  8. int readdir_rec(char * dossier) {
  9.     DIR * pdossier;
  10.     DIR * psousdossier_open;
  11.     struct dirent * psousdossier_read;
  12.     char * sousdossier;
  13.     char * nomdudossier;
  14.     pdossier = opendir(dossier);
  15.     if (!pdossier) {
  16.         printf ("dossier d'entree impossible a ouvrir !\n" );
  17.         system("PAUSE" );
  18.         exit(1);
  19.     }
  20.     errno=0;
  21.     while ((psousdossier_read=readdir(pdossier))){
  22.         nomdudossier=psousdossier_read->d_name;
  23.         //printf("%s",dossier);
  24.         sprintf(sousdossier,"%s%s/",dossier,nomdudossier);
  25.         //printf("------%s\n",dossier);
  26.         if (strcmp(nomdudossier,"." )!= 0 && strcmp(nomdudossier,".." )!= 0){
  27.             psousdossier_open = opendir(sousdossier);
  28.             if (psousdossier_open != NULL) {
  29.                 closedir(psousdossier_open);
  30.                 printf("+%s\n", nomdudossier);
  31.                 readdir_rec(sousdossier);
  32.             } else { printf(strerror(errno));printf(sousdossier);}
  33.         }
  34.     }
  35.     if (errno){
  36.         printf ("readdir() failure; terminating\n" );
  37.         system("PAUSE" );
  38.         exit(1);
  39.     }
  40.     closedir(pdossier);
  41.     return 0;
  42. }


ps compilé sous dev c++ si ca apporte quelquechose.
Merci d'avance

Reply

Marsh Posté le 03-11-2007 à 11:50:07   

Reply

Marsh Posté le 03-11-2007 à 13:44:31    

J'ai enfin trouvé !
En définissant sousdossier non plus en char * sousdossier mais en char sousdossier[255] ca marche !

Reply

Marsh Posté le 03-11-2007 à 14:26:49    

mhg a écrit :

je me suis remis au c récemment  

Code :
  1. #include <cstdlib>
  2. #include <iostream>
  3. <...>




Pas du C. Le forum C++, c'est à coté.
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 03-11-2007 à 17:21:05    

très bof. Lis ça http://udrepper.livejournal.com/18555.html .
 
Sinon tu peux aussi repartir au chapitre chaîne de caractères, allocation toussa ?

Reply

Marsh Posté le 06-11-2007 à 12:46:44    

Faut espérer que tu n'ai pas de lien vers un répertoire parent.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed