fread () не может прочитать данные файла в Dev-Cpp

Я сталкиваюсь со странной ситуацией. Я использую Dev C ++ для написания следующей программы:

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>

int main() {
FILE *fp;     // edited -- wrong type at first (File)
unsigned char a, b;
int c, count, res;      // added "res"short int d;

fp = fopen("record.dat", "r");
fseek(fp, SEEK_SET, 0);
count = 0;    // edited -- wrong variable name at first

res = fread(&a, 1, 1, fp);
printf("a res = %d, errno %d\n", res, errno);
while(count < 10) {
count++;
res = fread(&b, 1, 1, fp);    // added "res =" as mentioned in comment
printf("b res = %d, errno %d\n", res, errno);
res = fread(&c, 4, 1, fp);    // added "res =" as mentioned in
printf("c res = %d, errno %d\n", res, errno);
res = fread(&d, 2, 1, fp);    // added "res =" as mentioned in
printf("d res = %d, errno %d\n", res, errno);
res = fread(&a, 1, 1, fp);    // ** where problem starts
printf("a res = %d, errno %d\n", res, errno);
}

fclose(fp);
}

Файл «record.dat» имеет размер более 1 МБ, поэтому я полагаю, что вышеуказанная программа может получить данные первых 10 записей без каких-либо проблем (например, не нужно обрабатывать EOF выпуск). Однако, когда я компилирую программу в Dev C ++ и запускаю ее, прочитав 4 записи, fread() (отмечено ** выше) возвращает 0, а затем последующие fread() внутри цикла while также возвращается 0, что означает, что данные не могут быть прочитаны. Чужая вещь это все errno равны 0, и когда я использую компилятор g ++ в Linux для компиляции той же программы, программа может без проблем прочитать все (не только 10) записей в одном файле.

Я что-то пропустил? Спасибо!

0

Решение

Если вы читаете бинарный файл, вы должны открыть его с помощью "rb"не "r", В противном случае вы получаете (в зависимости от платформы) обработку в «текстовом режиме». В Linux это ничего не меняет, но в Windows это переводит CR / LF (0D 0A) чтобы '\n' и может также интерпретировать ^Z как конец файла.

Вы можете убедиться в этом, посмотрев на шестнадцатеричный дамп файла: если ваша программа загадочно перестает читать 1A, это проблема.

2

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector