PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : struct mit klammern



Blauer_Baer
05-12-2005, 18:10
Hi
kann mir evtl jemand erklären warum bei folgendem code die klammern um das *dirzeiger müssen.

printf("%s\n",(*dirzeiger).d_name);
ich verstehe das

(*dirzeiger).d_name
als ein normales struct, und mir währe es neu wenn da ein teil in klammern müsse. Es lies sich sowohl unter Windows als auch unter Linux ohne klammern nicht compilieren.
Hier der gesamte code.


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

int main()
{
DIR *dir;
struct dirent *dirzeiger;
/* Verzeichnis öffnen */
if((dir=opendir("C:/Dokumente und Einstellungen/Ich/Desktop"))!= NULL)
/* komplettes Verzeichnis Eintrag für Eintrag auslesen */
while ((dirzeiger=readdir(dir)) != NULL)
printf("%s\n",(*dirzeiger).d_name);
system("Pause");
return 0;
}


Vielen dank schon einmal im vorraus und Gruß
Blauer_Baer

pucki
05-12-2005, 19:41
jup

wenn du einen pointer hast, dann greifst du auf die attribute wie folgt zu

dirzeiger->d_name

und das ist gleichbedeutend mit
(*dirzeiger).d_name

wenn du folgendes schreibst:

*dirzeiger.d_name

dann interpretiert er das

dirzeiger.d_name als zeiger auf deinen wert, der

*

veranlasst ihn dann sich den inhalt aus der dort gespeicherten "adresse" zu holen ...
dann ist aber dirzeiger ein objekt, bzw. eine struktur.

und ein man readdir ergab:


struct dirent {
#if defined _FILE_OFFSET_BITS && _FILE_OFFSET_BITS == 64
ino64_t d_ino; /* inode number */
off64_t d_off; /* offset to the next dirent */
#else
ino_t d_ino; /* inode number */
off_t d_off; /* offset to the next dirent */
#endif
unsigned short int d_reclen; /* length of this record */
unsigned char d_type; /* type of file */
char d_name[256]; /* filename */
};

es wird also ein pointer auf eine struktur zurückgeben ...

gruesse

Blauer_Baer
05-12-2005, 20:16
jear
das geht so...
vielen dank für die schnelle hilfe