wieso ...
-
funktioniert sowas ... :
while((fread(buffer, sizeof(char), NUM_BYTES, fp)) != -1) { nbr = nbr + NUM_BYTES; fwrite(buffer, sizeof(char), NUM_BYTES, fop); counter--; if((counter%10) == 0) printf("%10d Kbyte kopiert\n", nbr/1024); if (feof(fp)) { printf(" >>> Dateiende erreicht ... !!\n"); break; } }while(nbr == NUM_BYTES);
wenn ich das Programm starte hängt es in einer Endlosschleife.
-
Original erstellt von sg:
**```cpp
while(nbr == NUM_BYTES);Das hier ist eine eigenständige Schleife. Und wenn nbr == NUM_BYTES ist, eine Endlosschleife.
-
Irgendwie doppelt gemoppelt?
-
die Sache war die: das war vorher eine do while schleife, aber ich hab das while am Ende vergessen, bzw nicht gelöscht. In der Regel sollte der Compiler den Code doch irgendwie so aufbrechen können:
while(1.Ausdruck){
}
while(2.Ausdruck); <- Semikolon == Ausdruckende
Wenn man das jetzt kompiliert hängt das program in einer Endlosschleife.
Das interessante ist das:
1. weder die Ausdrücke in der ersten While Schleife abgearbeitet werden, noch
2. die Bedingung im 2. Ausdruck überprüft wird, die sowieso nicht stimmen dürfte allein schon wegen nbr = nbr + NUM_BYTES innerhalb der ersten Schleife.Ausserdemverwundert mich das ich keine Warnung oder Fehler kriege, selbst bei -Wall nicht.
-
Wie kommst du darauf, dass fread jemals -1 zurückliefert?
-
Aus dem Compiler Helpfile (gcc)
#include <stdio.h>
size_t fread(void *buffer, size_t size, size_t number, FILE *file);
Description
This function reads size*number characters from file to buffer.
Return Value
The number of items of size size read, or -1 on error.
dort stand natürlich nicht das fread bei EOF die Anzahl der komplett gelesenen Bytes zurückgibt
Ist auch eher ein älteres helpfile