Извините, если это форматирование беспорядочно, это мой первый опыт использования stackoverflow. Я пытаюсь использовать функцию fread
для чтения в файл card.raw
в блоках по 512 байт и сохранить первые 4 байта блока в s1-s4
, а остальные 508 байт остались в массиве байтов. Однако, когда я пытаюсь запустить это, я получаю ошибку сегментации. Когда я попытался отлаживать, после вызова функции fread
, argv
, outptr
, inptr
и buf
значения все становятся NULL
. Почему это и что я делаю неправильно?Чтение данных из файла в структуру (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)
{
Условный оператор используется для проверки, если первые 3 элемента buf
содержат следующие шестнадцатеричные подписи. Я хотел использовать malloc
в цикле, чтобы прочитать необработанный файл в структурах по 512 байт, решить, что делать с 512 байтами, а затем бесплатно освобождать его.
Вы хотите прочитать данные в переменной 'buf' или в блок памяти, на который' buf' содержит указатель? – immibis
'fread (& buf, sizeof (BUFFER), 1, inptr);' -> 'fread (buf, sizeof (BUFFER), 1, inptr);' – kaylum
Прежде всего, добавьте проверку ошибок на 'fopen()' и 'Fread()'. При этом код не предпринимает никаких действий при проверке того, работал ли вообще файл. – alk