Dateinamen in Array



  • Ich hab mal wieder das Problem mit den casts.

    #include <stdio.h>
    #include <stdlib.h>
    #include <sys/types.h>  //DIR
    #include <dirent.h>     //DIR
    #include <dir.h>        //getcwd();
    #include <string.h>
    
    int main(void)
    {
      int zaehler;
      DIR *dir;
      char dirname[200];
      char datanames[4096];
      struct dirent *dirzeiger;
       if(getcwd(dirname,sizeof(dirname)) == NULL) {
          fprintf(stderr, "Fehler bei getcwd ...\n");
          return EXIT_FAILURE;
       }
       printf("Working-Directory: %s\n", dirname);
    
       if((dir=opendir(dirname)) != NULL)
        while((dirzeiger=readdir(dir)) != NULL)
          {
           zaehler=0;
           printf("%s\n",dirzeiger->d_name);
           strncpy(datanames[zaehler],dirzeiger->d_name, sizeof(datanames));
           printf("%s",datanames[zaehler]);
           zaehler++;
           }
       closedir(dir);
       getch();
       return EXIT_SUCCESS;
    }
    


  • Ich sehe in deinem Post keine Frage. Daraus schließe ich, das du uns dein tolles Programm einfach vorführen willst. Super!

    Was ich nicht verstehe ist dein zaehler...
    Soll der wirklich immer 0 sein?



  • Ich trottel....
    Naja, hier die genaue Beschreibung:
    Ihr könnt das hier nur unter dev-cpp mit mingwex gelinkt compilen, glaub ich.
    Ich will jeden Dateinamen in der Working Directory in ein Array packen. Nein, zaehler soll nicht null bleiben.
    Hmmm, i-wie muss ich des in ne for schleife umpacken. Aber das ist jetz nicht mein hauptproblem. Mein Problem is, dass immer ein Fehler kommt, wenn ichs ausführen will. WIESO?
    Liegt an casts (gibt mir zumindest der compiler den warning).
    und beim ausführen wirds beendet.



  • Leicht verändert:

    #include <stdio.h> 
    #include <stdlib.h> 
    #include <sys/types.h>  //DIR 
    #include <dirent.h>     //DIR 
    #include <unistd.h>
    #include <string.h> 
    
    int main(void) 
    { 
      int zaehler; 
      DIR *dir; 
      char dirname[200]; 
      char datanames[1024][1024]; 
      struct dirent *dirzeiger; 
       if(getcwd(dirname,sizeof(dirname)) == NULL) { 
          fprintf(stderr, "Fehler bei getcwd ...\n"); 
          return EXIT_FAILURE; 
       } 
       printf("Working-Directory: %s\n", dirname); 
    
       zaehler=0; 
       if((dir=opendir(dirname)) != NULL) 
        while((dirzeiger=readdir(dir)) != NULL) 
          { 
           printf("%s\n",dirzeiger->d_name); 
           strcpy(datanames[zaehler],dirzeiger->d_name); 
           printf("%s",datanames[zaehler]); 
           zaehler++; 
           } 
       closedir(dir); 
    
       return EXIT_SUCCESS; 
    }
    


  • Also erstmal big thx, jetzt bin ich einen Schritt weiter. Wieso kein strncpy? Wär das nicht sicherer?
    Und wieso ein zweidimensionales Array?



  • Saphir schrieb:

    Wieso kein strncpy? Wär das nicht sicherer?

    Klar, wenn du verhindern möchtest, das über die Puffergrenzen geschrieben wird, bzw. die Dateinamen nicht beliebig lang sein dürfen, dann verwende strncpy(). Die Länge der Dateinamen unter Unix ist glaub ich sogar auf 255 Zeichen beschränkt, dann wäre das also wieder egal...

    Saphir schrieb:

    Und wieso ein zweidimensionales Array?

    Find ich übersichtlicher 🙂


Log in to reply