чтение части файла в буфер с использованием fread - PullRequest
0 голосов
/ 28 декабря 2011

Пожалуйста, скажите мне, где я иду не так.

У меня есть файл, в который мне нужно скопировать последние n байтов в массив.

    char *buffer = (char *)malloc(sizeof(char)*n);
    size_t result = fread(buffer,sizeof(char)*n,1,outptr);

Значение результата равно 0.

Все до этого момента в моем коде работает правильно (я проверил все значения с помощью gdb). Я освобождаю буфер и после некоторых строк.

n вводится пользователем. Выходной ptr используется как

    FILE *outptr = fopen(outfile,"w") 

// Имя выходного файла также вводится пользователем и проверяется, чтобы убедиться, что это bmp-файл.

Ответы [ 2 ]

1 голос
/ 28 декабря 2011

Вы пытаетесь прочитать из файла, который вы открыли в режиме записи.

Изменение:

FILE *outptr = fopen(outfile,"w");

до:

FILE *outptr = fopen(outfile,"r"); /* Use "rb", not "r", if 'outfile' is binary. */
1 голос
/ 28 декабря 2011

size_t result = fread(buffer, n, 1, outptr); должно хорошо.

OTOH, файл, над которым вы работаете, пуст?

Пожалуйста, убедитесь, что fopen() был успешным, а также проверьте, был ли malloc() успешным!

На совершенно другой ноте sizeof() и fread() возвращает size_t, и это должно быть приведено к int.

...