Поскольку вы открываете файл в текстовом режиме, он преобразует маркеры конца строки, такие как LF, в CR/LF.
Это, скорее всего, если вы работаете в Windows (и вы, вероятно, знаете, что ваше имя файла начинается с "c:\"
).
Если открыть файл в режиме "wb"
, я подозреваю, что вы найдете номера идентичны:
FILE* test = fopen("C:\\core.u", "wb");
Стандарт C99 это сказать в 7.19.5.3 The fopen function
:
Режим аргумент указывает на строку. Если строка является одной из следующих, файл открыт в указанном режиме. В противном случае поведение не определено.
r
открыт текстовый файл для чтения
w
усечение до нулевой длины или создать текстовый файл для записи
a
Append; открыть или создать текстовый файл для записи в конец файла из-
rb
открытый двоичный файл для чтения
wb
усечение до нулевой длины или создать двоичный файл для записи
ab
Append; открыть или создать двоичный файл для записи в конец файла из-
r+
открыт текстовый файл для обновления (чтение и запись)
w+
усечение до нулевой длины или создать текстовый файл для обновления
a+
дописывания; открыть или создать текстовый файл для обновления, написание на конец из файла
r+b
или rb+
открытый двоичный файл для обновления (чтение и запись)
w+b
или wb+
укоротить до нулевой длины или создать двоичный файл для обновления
a+b
или ab+
присоединять; открыть или создать двоичный файл для обновления, написание на конец из файла
Вы можете видеть, что они различают w
и wb
. Я не верю, что реализация требуется, чтобы обрабатывать два по-разному, но обычно безопаснее использовать двоичный режим для двоичных данных.
Я рекомендую не использовать пути стиля NT в аргументах fopen(). Windows также поддерживает POSIX-пути, которые переносимы и не требуют экранирования '\'. – Terminus 2008-10-01 09:14:29