C: функция Fread возвращает 0 - PullRequest
0 голосов
/ 12 марта 2012
...
rewind(ftmpname);
if (stat(tmpname, &st_file)==-1) 
    longjmp(Berror, (ETMPSTAT) );

tmpsize = st_file.st_size;
i = 0;

while (i<tmpsize)
{
    n = fread(buf, 1, (READ_CONST), ftmpname );     
    write_byte(farch, buf, n);
    i+=n;
}
...

fread всегда возвращает 0. Я не знаю, что не так. Я делаю перемотку раньше, и это не помогло. Извините за мой английский.

1 Ответ

2 голосов
/ 12 марта 2012

Если вы не знаете, что не так, вы должны проверить на наличие ошибок.Вот что написано на странице руководства:

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

fread () и fwrite () возвращают количество успешно прочитанных или записанных элементов (т. Е. Не количество символов),Если возникает ошибка или достигается конец файла, возвращаемое значение представляет собой короткий счетчик элементов (или ноль).

fread () не различает конец файла и ошибку, ивызывающие должны использовать feof (3) и ferror (3), чтобы определить, что произошло.

Так почему бы вам не использовать те функции, которые точно сообщают вам, что не так?

...