For the sake of learning C and understanding the difference between Binary Files and Text Files, I'm attempting to write a string to file as both file types like so:
char * string = "I am a string!";
FILE * filePtrA = fopen("/output.txt", "wt");
fwrite(string, strlen(string), 1, filePtrA);
FILE * filePtrB = fopen("/output.bin", "wb");
fwrite(string, strlen(string), 1, filePtrB);
fclose(filePtrA);
fclose(filePtrB);
However both "wt"
and "wb"
are writing as a Text File, where "wb"
should be writing as a Binary File. Hex appears like so for both files:
49 20 61 6D 20 61 20 73 74 72 69 6E 67 21
Why is this happening, and how can I write something as a Binary File?
I have read that the OS (Mac OS X 10.6 - GCC 4.2) might not differentiate between Binary and Text Files, though I'm still stumped why a hex editor wouldn't detect any difference.
All files are binary.
The difference between "text files" and "binary files" in the context of fopen
is that the standard library may use a filter for reading and writing the file when in text mode. In binary mode, what you write is always what is written.
The only practical example I know of is in Windows, where opening a file in text mode will make it convert between Windows-style line endings (CRLF, "\r\n"
) and C-style/Unix-style line-endings (LF, "\n"
). For example when you open a file for reading in Windows in text mode, line endings will appear as "\n"
in your program. If you were to open it in binary mode, line endings would appear as "\r\n"
in your program.
You can also inspect your file with cat
, for example:
cat filename
You should get the output: I am a string!
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With