Вы не правы.Изображение - это двоичные данные, ни строковые данные.Итак, есть две ошибки:
1) Вы не можете проверить конец файла с константой EOF
.Потому что EOF
часто определяется как 0xFF и является действительным байтом в двоичном файле.Поэтому используйте функцию feof()
, чтобы проверить конец файла.Или также вы можете проверить текущую позицию в файле с максимально возможным (вы получили это раньше с ftell()
).
2) Поскольку файл является двоичным, он может содержать \0
в середине.Поэтому вы не можете использовать строковую функцию для работы с такими данными.
Также я вижу, что вы используете язык C ++.Скажите пожалуйста, почему вы используете классический синтаксис C для работы с файлами?Я думаю, что использование функций C ++, таких как файловые потоки, контейнеры и итераторы, упростит вашу программу.
PS И я хочу сказать, что у вашей программы будут проблемы с действительно большими файлами.Кто знает, может быть, вы будете пытаться работать с ними.Если «да», переписать функции ftell
/ fseek
в их int64
(long long int
) эквиваленты.Также вам нужно исправить счетчик массива.Еще одна хорошая идея - читать файлы по блокам.Чтение за байтом значительно медленнее.