Dateien werden falsch eingelesen!

mowl

Mitglied
Mit folgendem Code versuche ich eine Datei einzulesen:
Code:
#include <string>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
    char read[4096];
    FILE *fp;
   
    fp = fopen("ugly.gif", "r");
    while (!feof(fp)) {
        printf("zeile: %s\n", fgets(read, 4096, fp));
    }
    fclose(fp);
    
    system("PAUSE");
    return 0;
}
Bei normalen Textdateien klappt das soweit, wenn ich Dateien mit binären Inhalten, also exe, gif oder Videodateien einlese werden die falsch ausgegeben. Was mache ich falsch?
 
Zu früh gefreut, die Dateien werden nicht auch mit rb nicht richtig ausgelesen.
Statt 902 Bytes werden nur 7 ausgelesen, ich hab aber keine Ahnung warum.
 
Das liegt wohl daran, dass in deiner Datei ein Nullbyte auftritt. In C werden aber normalerweise nullterminierte Strings benutzt, d.h. sobald in einem Array von chars ein solches auftritt, wird das als Ende des Strings angesehen. In deinem Array stehen die restlichen Bytes schon noch drin, nur bei der Ausgabe über printf werden sie nicht berücksichtigt.
 
Zuletzt bearbeitet:
Aber wenn ich mir die gelesenen Daten in eine Datei schreiben lasse sinds auch nur 7Bytes und keine 902.
 
Wie schon erwähnt Strings enden mit \0 , sprich nimm die Funktion fread , statt file get string fgets
 
Zurück