Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Array zum speichern von Dateinamen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
02.02.2008, 16:25 Uhr
johnnyeast



Hallo an alle.

Ich habe ine kleines Problemchen, bei dem ich nicht weiterkomme.
Ich versuche gerade eine Funktion zu schreiben, die einen Ordner öffnet und alle Dateinamen mit einer bestimmten Endung in ein dynamisch allokiertes Array speichert.
Ich lasse den Ordner erst einmal durchsuchen um zu wissen wieviele Dateien diese Endung haben und wie lang der längste Dateiname ist.
Dann allokiere ich ein charr** s in dem ich die Dateinamen beim 2. Durchlauf abspeichern möchte.

die allokierung sieht folgendermaßen aus und scheint auch zu funktionieren.


C++:
s = (char**) malloc (number_of_problems * sizeof(char*));
  for(int j=0; j<number_of_problems;j++)
  {
      s[j] = (char*) malloc (maxlength *sizeof(char));
  }



der Abspeichervorgang ist bisher in dieser form:

C++:
  while ((dir_entry = readdir(dirp)) != NULL)                
  {
    if (strstr(dir_entry->d_name,".gms")!=NULL)
    {
            s[i] = dir_entry->d_name;
            i++;
    }
  }



jedoch haut das irgendwie nicht so richtig hin wiie ich es gemacht habe. Hat jemand eine Idee, was ich verändern muss, damit es klappt. Habe schon überall gesucht, doch irgendwie habe ich keine Lösung gefunden.

mmfg Johnny
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
02.02.2008, 17:22 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


hi,


C++:
strncpy(s[i], maxlength, dir_entry->d_name);



in deiner schleife benutzen - du setzt sonst nur den zeiger s[i] auf die adresse deines temporären dateinamens
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
02.02.2008, 18:09 Uhr
johnnyeast



Habe es ausprobiert, muss denk ich bisschen anders heißen.

habs so abgeändert.

C++:
strncpy(s[i], dir_entry->d_name, dir_entry->d_namlen)



aber leider geht es so auch nicht. auch mit maxlength nicht. bricht dann sofort bei der abfrage eines strings mit speicherfehler ab.
also sobald ich cout << s[i] irgendwie mache.
Oder muss der eintrag dann irgendwie erst herauskopiert werden, dass er wieder in einem string oder cstring steht?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
02.02.2008, 18:35 Uhr
johnnyeast



Habe es jetzt doch noch zum laufen gebracht. Mit dem üblichen Mittel: tryanderror
Die Dateinamen stehen jetzt richtig in dem Array drin.
Abgespeichert werden sie wie folgt:


C++:
  while ((dir_entry = readdir(dirp)) != NULL)                        
  {
    if (strstr(dir_entry->d_name,".gms")!=NULL)
    {
        strncpy(s[i], dir_entry->d_name, maxlength);
        i++;
    }
  }



ausgelesen so:


C++:
filename_cstr =(char*) malloc (maxlength * sizeof(char));

  for(int k=0;k<number_of_problems;k++)
  {
      strncpy(filename_cstr, s[k], maxlength);
      cout << filename_cstr << endl;
  }


das funktioniert ohne Probleme.

Danke für die schnelle Hilfe.

mfg Johnny
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
02.02.2008, 18:59 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


ja hatte von snprintf grad die reihenfolge der parameter gehabt.
Ansonsten terminierst du keine deiner strings, das es unten geht ist zufall!

benutz mal für die string elemente selbst calloc, dann sollte er sie dir mit 0 vorbelegen.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: