2011-12-28 3 views
0

Пожалуйста, скажите мне, где я ошибаюсь.чтение части файла в буфер с использованием fread

У меня есть файл, который мне нужно скопировать последние 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 файл.

+0

Не могли бы вы опубликовать некоторые больше кода? Как рассчитывается 'n'? Как устанавливается 'outptr'? – hmjd

ответ

1

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

Изменение:

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

к:

FILE *outptr = fopen(outfile,"r"); /* Use "rb", not "r", if 'outfile' is binary. */ 
+0

Спасибо, мой плохой Я изменил его! – kevin

1

size_t result = fread(buffer, n, 1, outptr); следует хорошо.

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

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

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