fread - Verständnisfrage



  • Hallo,
    ich habe folgendes Codestück:

    FILE *fp = NULL;
    fopen_s(&fp,strFilename.c_str(),"rb");
    
    unsigned short uWidth, uHeight, uDepth;
    fread(&uWidth,sizeof(unsigned short),1,fp);
    fread(&uHeight,sizeof(unsigned short),1,fp);
    fread(&uDepth,sizeof(unsigned short),1,fp);
    

    Es funktioniert auch einwandfrei, aber ich verstehe nicht warum :)!?! Habe jetzt schon viel dazu gelesen, aber ich komme nicht dahinter...

    1. Müsste man nicht für die Variablen uWidth, uHeight, uDepth zuvor Speicher reservieren, also nicht bloß deklarieren?
    2. Wie funktioniert es, dass fread() 3mal hintereinander mit dem selben File aufgerufen wird und 3 verschiedene Werte liefert?`
    3. fread liefert ja die Anzahl der verarbeiteten Blöcke zurück, heißt das in diesem Fall wie oft ein Block der Größe unsigned short, also 2 Byte gelesen werden konnte? Aber warum dann wieder 2) 😕?

    Ich bedanke mich schon mal für eure Geduld :)!

    mfg,
    soad



  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ in das Forum C (C89 und C99) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


  • Mod

    soad schrieb:

    1. Müsste man nicht für die Variablen uWidth, uHeight, uDepth zuvor Speicher reservieren, also nicht bloß deklarieren?

    Die gute alte Sprachverwirrung bei Definition/Deklaration 🙄 . Das was du da machst reserviert Speicher, wird aber trotzdem Deklaration genannt. Google mal ein bisschen zu den Begriffen, um dies besser zu verstehen.

    1. Wie funktioniert es, dass fread() 3mal hintereinander mit dem selben File aufgerufen wird und 3 verschiedene Werte liefert?`

    😕 Weil in der Datei drei verschiedene Werte stehen? FILE ist eine "komplexe" Struktur, es enthält so hochgradig fortgeschrittene Dinge wie einen Positionszähler.

    1. fread liefert ja die Anzahl der verarbeiteten Blöcke zurück, heißt das in diesem Fall wie oft ein Block der Größe unsigned short, also 2 Byte gelesen werden konnte? Aber warum dann wieder 2) 😕?

    Ja, es wird die Anzahl der erfolgreich gelesenen Blöcke der angegebenen Größe zurück. Deinen letzten Satz verstehe ich nicht.

    Übrigens ist unsigned short nicht unbedingt 2 Bytes groß. Und die interne Darstellung ist auch nicht standardisiert. Dies schränkt die Portabilität von solchem Code wie dem hier gezeigten ein.



  • Danke für deine Antwort und deinen Sarkasmus.


Anmelden zum Antworten