Since you're opening the file in text mode, it will convert end-of-line markers, such as LF, into CR/LF.
This is likely if you're running on Windows (and you probably are, given that your file name starts with "c:\"
).
If you open the file in "wb"
mode, I suspect you'll find the numbers are identical:
FILE* test = fopen("C:\\core.u", "wb");
The C99 standard has this to say in 7.19.5.3 The fopen function
:
The argument mode points to a string. If the string is one of the following, the file is
open in the indicated mode. Otherwise, the behaviour is undefined.
r
open text file for reading
w
truncate to zero length or create text file for writing
a
append; open or create text file for writing at end-of-file
rb
open binary file for reading
wb
truncate to zero length or create binary file for writing
ab
append; open or create binary file for writing at end-of-file
r+
open text file for update (reading and writing)
w+
truncate to zero length or create text file for update
a+
append; open or create text file for update, writing at end-of-file
r+b
or rb+
open binary file for update (reading and writing)
w+b
or wb+
truncate to zero length or create binary file for update
a+b
or ab+
append; open or create binary file for update, writing at end-of-file
You can see they distinguish between w
and wb
. I don't believe an implementation is required to treat the two differently but it's usually safer to use binary mode for binary data.