Angenommen es befinden sich 15 Dateien im aktuellen Verzeichnis.
closedir(dirp);
Jetzt hat die Variable file_count
den Wert 15.
Angenommen jetzt erstellt jemand eine neue Datei im aktuellen Verzeichnis.
GefundeneDateinamen *gefundeneDateinamen = (GefundeneDateinamen*)(malloc(file_count * sizeof(GefundeneDateinamen)));
Jetzt hast du Speicher für ein 15-elementiges Array mit Werten vom Typ GefundeneDateinamen
.
gefundeneDateinamen->aktuellerName = (char*)malloc(sizeof(char)*(strlen(dir->d_name)+1));
Du wolltest doch gefundeneDateinamen
als Array verwenden.
Deshalb gefundeneDateinamen[count].aktuellerName = ...
strncpy (gefundeneDateinamen[count].aktuellerName,dir ->d_name, strlen(dir->d_name) );
Verwende strcpy
. Die Funktion strncpy
ist dann sinnvoll, wenn du nur einen Teil des Strings kopieren willst oder wenn die Quelle nicht nullterminiert ist.
Damit behebst du auch gleichzeitig den Fehler, dass das letzte Zeichen des Dateinamens abgschnitten wird.
while ((dir = readdir(d)) != NULL)
Unter den obigen Annahmen werden 16 Einträge eingelesen, du hast aber nur Speicher für 15 Einträge reserviert. Siehe Time-of-Check-to-Time-of-Use-Problem.