Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Seltsame Ausgabe bei readdir() unter C

Empfohlene Antworten

Veröffentlicht

Hallo Leute,

ich bastle grad ein einem kleinen Programm. Zunächst möchte ich erstmal, dass das Programm den Inhalt des Ordners, den ich als Parameter übergebe, ausgibt. Das funktioniert auch soweit, nur, dass immer noch "." und ".." mit ausgegeben werden und ich hab keine Ahnung woher das kommt. Hier erstmal das Programm:


#include <stdio.h>

#include <sys/types.h>

#include <dirent.h>

#include <errno.h>

#include <stdlib.h>


int i = 0;

int lang = 0;

char test;

char name;


int main(int zahl, char *para[1])

{


        DIR *verzeichnis;

        struct dirent *eintrag;

        verzeichnis = opendir(para[1]);


if(zahl != 2) //wurde genau 1 parameter übergeben? 

{

        printf("Fehler bei der Parameteruebergabe.\n");

        printf("Es muss genau ein Parameter uebergeben werden!\n");

        printf("Die Syntax lautet: `./parameter /ordner/ordner/.../ordner`\n");

        return 0;

}


while((eintrag = readdir(verzeichnis)) != NULL)

{


if(eintrag->d_name != "."/* || eintrag->d_name != ".."*/)

{

        printf("%s\t", eintrag->d_name);

        i++;

//      lang += stringlength(eintrag->d_name);

//      printf("Laenge: %d \n",lang);

}


}

printf("\n%d Einträge gefunden\n",i);


//printf("Die Laenge ist: %d\n",lang);


//printf("Der Name, also d_name ist: %s \n",name);


return 0;

}
und das hier ist die Ausgabe, wenn ich das Programm aufrufe:
root@kadaj-ubuntu:/home/kadaj/Dokumente/c# ./parameter /home

.	..	kadaj	

3 Einträge gefunden

Die Einträge lässen sich auch nicht mit einer if-Anweisung abfangen, aber möglicherweise kann ich es nicht so vergleichen, wie ich es im Quellcode versucht habe. Viel mehr würde mich interessieren, warum die Punkte mit ausgegeben werden. Kann mir jemand helfen?

Vielen Dank

Der einzelne Punkt steht für das Verzeichnis selbst, zwei Punkte sind das übergeordnete Verzeichnis.

Dein Vergleich funktioniert so nicht, weil du bei Arrays mit == und != immer nur die Anfangsadressen vergleichst. Benutz strcmp.

Bearbeitet von Klotzkopp

  • Autor

Stimmt, das leuchtet irgendwie ein, vielen Dank.

Ich hab dafür nochmal ein anderes Programm geschrieben, funktioniert super, danke :beagolisc

#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <dirent.h>
#include <sys/types.h>
#include <stdlib.h>

int i = 0;

int main(int anzahl, char *para[1])
{

DIR *verzeichnis;
struct dirent *eintrag;
verzeichnis = opendir(para[1]);

if(anzahl != 2)
{
printf("Syntaxfehler:\n");
return 0;
}

while((eintrag = readdir(verzeichnis)) != NULL)
{
if(strcmp(eintrag->d_name, "..") != 0 && strcmp(eintrag->d_name, ".") != 0)
{
printf("name: %s \n",eintrag->d_name);
i++;
//printf("vergleich der zeichenkette mit '..': %d\n\n",strcmp(eintrag->d_name, ".."));
}
}

printf("%d Einträge gefunden",i);

return 0;
}
[/PHP]

Bearbeitet von Kadaj

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.