fread liest nur bis \0 ein!
-
Hallo,
danke erstmal für die schnelle Antwort!
hier der Code:
unsigned char* Get_ciphertxt(unsigned char *filename) { unsigned char *ciphertxt; FILE* fp; if(filename == NULL){ printf("NULL pointer reference detected...\n"); } fp = fopen(filename, "r"); long filesize = GetFileLength(fp); ciphertxt = (unsigned char*)malloc((filesize)*sizeof(unsigned char)); fread(ciphertxt, 1,filesize, fp); fclose(fp); return ciphertxt; }
edit:
Filesize = 52656
und der char den ich zurückbekomme ist 231 Zeichen lang.
-
Gibt denn GetFileLength den richtigen Wert zurück?
Öffne die Datei besser im Binary-Modus und
werte auch den Rückgabewert vonfread
aus.Es ist ja schön, dass du den Dateinamen zumindest auf NULL überprüfst, aber das Programm macht nach der Fehlermeldung munter weiter.
Und viel wichtiger wäre die Überprüfung des Erfolgs vonfopen
und vonmalloc
.
-
PaulSonne schrieb:
und der char den ich zurückbekomme ist 231 Zeichen lang.
Woher weißt du das?
strlen
ist nicht die richtige Funktion dafür, denn die hört beim '\0' auf. Egal was dahinter ist.
-
PaulSonne schrieb:
und der char den ich zurückbekomme ist 231 Zeichen lang.
Und das ermittelst du bestimmt mit einer Funktion, die eigentlich für Strings gedacht ist und daher bei Nullbytes abbricht.
-
Im Augenblick hast du außerhalb der Funktion Get_ciphertxt keine Möglichkeit die Größe von dem Speicherbereich, auf den ciphertxt zeigt, zu ermitteln.
Das musst du mit zusätzlichen Funktionsparamtern machen.
-
DirkB schrieb:
PaulSonne schrieb:
und der char den ich zurückbekomme ist 231 Zeichen lang.
Woher weißt du das?
strlen
ist nicht die richtige Funktion dafür, denn die hört beim '\0' auf. Egal was dahinter ist.Ja das ist mir bewusst. Da ich mit Binärdatein arbeite lasse ich mir die Ausgaben per hexdump anzeigen. Wenn ich eine andere Binärdatei mit ca der selben länge nehme, passiert genau das selbe wenn fread auf 00 trifft.
-
DirkB schrieb:
Im Augenblick hast du außerhalb der Funktion Get_ciphertxt keine Möglichkeit die Größe von dem Speicherbereich, auf den ciphertxt zeigt, zu ermitteln.
Das musst du mit zusätzlichen Funktionsparamtern machen.
Also, wie stellst du fest, wieviel Daten da drin sind?
Der Fehler liegt nicht am
fread
.
-
DirkB schrieb:
DirkB schrieb:
Im Augenblick hast du außerhalb der Funktion Get_ciphertxt keine Möglichkeit die Größe von dem Speicherbereich, auf den ciphertxt zeigt, zu ermitteln.
Das musst du mit zusätzlichen Funktionsparamtern machen.
Also, wie stellst du fest, wieviel Daten da drin sind?
Der Fehler liegt nicht am
fread
.aaah, verdammt...
ich habe folgende Funktion benutzt;
BIO_dump_fp (stdout, (unsigned char *) ciphertxt, strlen(ciphertxt));
um mir den Hexdump anzuzeigen... habe ganz übersehen das ich ja strlen mit drin habe. Kein Wunder. Also, die Funktion klappt einwandfrei. bekomme das richtige Ergebniss angezeigt wenn ich:
BIO_dump_fp (stdout, (unsigned char *) ciphertxt, filesize);
nehme.
Sry für meine Blödheit und danke für die schnelle Hilfe!!
-
Beachte aber trotzdem die Hinweise von https://www.c-plusplus.net/forum/p2456552#2456552 (15:24:31 12.06.2015)
-
Bereits erledigt. Danke nochmal!