@ a1ex07 устраняет некоторые проблемы с вашим текущим кодом.Однако, как я уже говорил в комментариях, я думаю, что ваш код может быть реализован более эффективно с некоторыми более существенными изменениями.
Я считаю, что у вас есть следующие проблемы:
- Вы выделяетебуфер в куче и не удается его освободить.
- Ваш буфер довольно мал.Вероятно, было бы более эффективно использовать больший буфер.
- Использование
fgets
и strlen
строковых функций, ориентированных на C, не подходит для операции побайтового копирования.
Я бы написал так:
void CopyTo(FILE *x)
{
FILE *f0;
char buff[16*1024];//16kB buffer, stack allocated
size_t count;
f0=fopen("file0.txt", "wt+");
do
{
count = fread(&buff, 1, sizeof(buff), x);
if (!ferror(x))
{
fwrite(&buff, 1, count, f0);
}
} while (count == sizeof(buff));
fclose(f0);
};
Обратите внимание, что в этой функции нет проверки ошибок.Никто не сделал твоего.Я оставлю это вам, чтобы добавить это, если хотите.Кроме того, я только собрал это в моей голове.Если есть какие-то глюки, я уверен, что вы можете разобраться с ними.