В дополнение к ответу выше ,
Посмотрите на синтаксис функции fwrite
:
https://en.cppreference.com/w/c/io/fwrite
size_t fwrite( const void *buffer, size_t size, size_t count,
FILE *stream );
Согласно документации, параметр size
- это размер каждого значения в buffer
.
. В вашем коде есть:
fwrite(buffer, 512, 1, img);
Проблема очевидна.
Похоже, вы делаете то же самое для fread
.Синтаксис функции:
https://en.cppreference.com/w/c/io/fread
size_t fread( void *buffer, size_t size, size_t count,
FILE *stream );
В вашем коде вы делаете:
fread(buffer, 512, 1, inptr)
Но это должно быть
fread(buffer, sizeof *buffer, 512, inptr)
Кроме того, при работе с такими файлами я рекомендую открывать их в двоичном режиме, чтобы не вмешиваться в считываемые данные.
FILE *inptr = fopen(infile, "rb");
Наконец, вы должны сделатьиспользуйте возвращаемое значение fread
, которое сообщает количество фактически прочитанных байтов.Затем вы можете использовать это значение в fwrite
, чтобы убедиться, что вы записали правильное количество байтов.