Ваш файл открыт в текстовом режиме. Использование ftell()
для определения длины файла, открытого в текстовом режиме, не переносимо и не обязательно работает.
fread()
может вернуть короткий счетчик элементов, если достигнут конец файла или произошла ошибка. Вы должны использовать feof()
/ ferror()
, чтобы определить, в каком случае:
size_t result = fread(buffer, 1, lSize, data_fp);
if (result != lSize) {
if (ferror(data_fp)) {
perror("Reading error");
exit (3);
}
/* End-of-file reached, so adjust file size downward */
lSize = result;
}
(Использование perror()
будет означать, что если произошла ошибка , вы увидите, что это такое).
Обратите внимание, что данные, считанные из файла, не обязательно обнуляются, поэтому вы не можете просто передать их в puts()
. Вы должны добавить нуль-терминатор:
buffer[lSize] = 0;
Для этого также потребуется выделить один дополнительный байт:
buffer = (char*) malloc (lSize + 1);
(sizeof(char)
определяется как 1
, поэтому здесь это не нужно).