Sorry, wenn diese Formatierung unordentlich ist, verwende ich Stackoverflow zum ersten Mal. Ich versuche, die fread
Funktion zu verwenden, um in die card.raw
Datei in Blöcken von 512 Bytes einzulesen und die ersten 4 Bytes des Blocks in s1-s4
und die anderen 508 Bytes zu speichern, die im Array von Bytes übrig sind. Wenn ich jedoch versuche, dies auszuführen, erhalte ich einen Segmentierungsfehler. Wenn ich das Debugging probierte, nachdem die fread
-Funktion aufgerufen wurde, argv
, outptr
, inptr
und buf
Werte werden alle NULL
. Warum ist das und was mache ich falsch?Lesen von Daten aus einer Datei in eine Struktur (C)
typedef uint8_t BYTE;
//block of 512 bytes
typedef struct
{
BYTE s1;
BYTE s2;
BYTE s3;
BYTE s4;
BYTE image[508];
}
BUFFER;
int main(int argc, char* argv[])
{
//opens memory card file
FILE* inptr = fopen("card.raw", "r");
int jpgcounter = 0;
//creates jpg file
char title[7];
sprintf(title, "%d.jpg", jpgcounter);
FILE* outptr = fopen(title, "a");
//create buf (pointer) of type BUFFER
BUFFER* buf;
do
{
//creates buffer structure for storage of 512B blocks
buf = malloc(sizeof(BUFFER));
//read 512 bytes at a time & stores every 512B block into a buffer struct buf
fread(&buf, sizeof(BUFFER), 1, inptr);
if(buf->s1 == 0xff && buf->s2 == 0xd8 && buf->s3 == 0xff)
{
Die if-Anweisung verwendet wird, zu überprüfen, ob die ersten drei Elemente buf
die folgenden hexadezimalen Signaturen enthalten. Ich wollte malloc
in einer Schleife verwenden, um die Raw-Datei in Structs von 512 Bytes zu lesen, zu entscheiden, was mit den 512 Bytes zu tun ist, und dann kontinuierlich freizugeben.
Möchten Sie die Daten in die Variable 'buf' oder in den Speicherblock, in dem' buf' einen Zeiger enthält, einlesen? – immibis
'fred (& buf, sizeof (PUFFER), 1, inptr);' -> 'fread (buf, sizeof (BUFFER), 1, inptr);' – kaylum
1. Fügen Sie die Fehlerüberprüfung zu 'fopen()' und hinzu 'fread()'. So wie es steht, unternimmt der Code keine Aktionen, um zu testen, ob der Zugriff auf die Datei überhaupt funktioniert. – alk