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...
- Müsste man nicht für die Variablen uWidth, uHeight, uDepth zuvor Speicher reservieren, also nicht bloß deklarieren?
- Wie funktioniert es, dass fread() 3mal hintereinander mit dem selben File aufgerufen wird und 3 verschiedene Werte liefert?`
- 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.
-
soad schrieb:
- 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.
- 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.
- 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.