Проверьте вашу обработку файлов, сняв «шифрование».Уберите эти строки
if (count % 2 == 0)
{
if ((aByte ^ 'A') != EOF) aByte = aByte ^ 'A';
}
else
{
if ((aByte ^ 'B') != EOF) aByte = aByte ^ 'B';
}
Ваш файл точно такой же?Я думаю, что это не будет.Вот несколько причин
- Файл длиннее 10 000 байт - вы закрываете файл в конце, поэтому я предполагаю, что эти байты потеряны
- Файл меньше 10 000 байт- вы не проверяете свойство EOF, поэтому похоже, что будет записан дополнительный байт
- count не инициализируется в этом коде - если он нечетный при одном запуске и даже при другом, он не будет 'матч.Кроме того, он просто скопирует случайное количество байтов в зависимости от того, что это за счет.Возможно, он инициализирован в другом месте.
- Вы не закрываете g, поэтому вы не можете быть уверены, что он был сброшен (fwrite может записывать в буфер)
UPDATE: EOF не является байтомчто вы можете найти в файле, это специальное возвращаемое значение, используемое некоторыми функциями API FILE (не fread).
Функция getchar () определяется следующим образом:
int getchar();
Itлибо возвращает EOF, либо int, находящийся в диапазоне char.Если это EOF, то это означает, что вы находитесь в конце файла.Если нет, вы можете смело использовать возвращение к персонажу.Единственное условие для EOF - это то, что он не является действительным символом.getchar () возвращает int, потому что он может вернуть любой символ (256 вариантов) + EOF, что в сумме дает 257 вариантов, которые не могут быть представлены в char.
Если вы посмотрите на fread (), вы увидитеВидите, это не имеет ничего общего с символами.Он принимает буфер и размер записи, а также количество записей и возвращает количество прочитанных байтов.Вы проходите мимо sizeof (char) и 1, чтобы получить char.Он не может хранить EOF в этом символе, потому что EOF не является действительным символом, это int и не подходит.Он не использует те же соглашения, что и getchar ().Если он встречает EOF, он возвращает число меньше, чем общее количество запрошенных байтов.В вашем случае это 0. Если fread () возвращает 0, проверьте feof () и ferror (), чтобы узнать, попали ли вы в конец файла или получили ошибку (оба приводят к тому, что fread возвращает меньше запрошенного числа).