Blutiger anfang im Dateiheader einlesen|| geht nicht...

iderise

Mitglied
Hi!

Ich habe hier nen kleines problem.
Ich will einen header eines GRF-Archives einlesen nur wenn ich das programm compile
und starte kommt dies raus:
GRF Header auslesen? 1= ja 0= nein
1
SUCCESS!
Signature: `
allowEncyption: P

source code:
Code:
#include <stdio.h>
int main()
{
FILE *GRF2;
int choose;

struct {                    // Offset
unsigned char signature[16];       // 0
unsigned char allowEncryption[14]; // 16
unsigned int fileTableOffset;            // 30
unsigned int number1;                    // 34
unsigned int number2;                    // 38
unsigned int version;                    // 42
} head;
			printf ("GRF Header auslesen? 1= ja 0= nein\n");
			scanf ("%i",&choose);
			if (!&choose)
			{
				return -1;
				}

GRF2=fopen("test.grf","rb");
if (GRF2){
printf ("SUCCESS!\n");
}else{
printf ("FAILED!\n");
}
memset(GRF2, 0x00, sizeof(GRF2));

fread(head.signature, 16, 1, GRF2);
fread(head.allowEncryption, 14, 1, GRF2);
//fread(head.fileTableOffset, 4, 1, GRF2);
//fread(head.number1, 4, 1, GRF2);
//fread(head.number2, 4, 1, GRF2);
//fread(head.version, 4, 1, GRF2);

printf ("Signature: %c\n",head.signature);
printf ("allowEncyption: %c\n",head.allowEncryption);
//printf ("fileTableOffset: %i\n",head.fileTableOffset);
//printf ("number1: %i\n",head.number1);
//printf ("number2: %i\n",head.number2);
//printf ("version: %i\n",head.version);
return 0;

}

könnte mir bitte jemand den fehler zeigen? :confused:
 
Hallo.

an der Codestelle:
C++:
memset(GRF2, 0x00, sizeof(GRF2));
ist es vermutlich nicht deine Absicht, den File Pointer zu plätten. Dort soll wahrscheinlich "head" stehen?

Gruß
MCoder
 
ops sorry da hab ich mir wol vertan

leider klappt es immernoch nicht

C++:
#include <stdio.h>
int main()
{
FILE *GRF2;
int choose;

struct {                    // Offset
unsigned char signature[16];       // 0
unsigned char allowEncryption[14]; // 16
unsigned int fileTableOffset;            // 30
unsigned int number1;                    // 34
unsigned int number2;                    // 38
unsigned int version;                    // 42
} head;
			printf ("GRF Header auslesen? 1= ja 0= nein\n");
			scanf ("%i",&choose);
			if (choose == 0)
printf ("Shutting down\n");
				return -1;

GRF2=fopen("test.grf","rb");

memset(&head, 0x00, sizeof(GRF2));
if (GRF2){
printf ("SUCCESS!\n");
}else{
printf ("FAILED!\n");
}
fread(head.signature, 16, 1, GRF2);
fread(head.allowEncryption, 14, 1, GRF2);
//fread(head.fileTableOffset, 4, 1, GRF2);
//fread(head.number1, 4, 1, GRF2);
//fread(head.number2, 4, 1, GRF2);
//fread(head.version, 4, 1, GRF2);

printf ("Signature: %c\n",head.signature);
printf ("allowEncyption: %c\n",head.allowEncryption);
//printf ("fileTableOffset: %i\n",head.fileTableOffset);
//printf ("number1: %i\n",head.number1);
//printf ("number2: %i\n",head.number2);
//printf ("version: %i\n",head.version);
return 0;

}
 
Hallo,

du solltest bei "memset(..." noch "sizeof(head)" schreiben, aber ansonsten sieht der Code soweit ganz gut aus. Es müsste eigentlich funktionieren. Bei "printf" solltest du allerdings "%s" als Typ verwenden, sonst wird nur das erste Zeichen ausgegeben. Kommen bei "signature" bzw. "allowEncryption" eigentlich nur ASCII-Zeichen herein? Ansonsten hätte "printf" nämlich ein Problem.

Gruß
MCoder
 
Zurück