I recently faced a problem regarding these 2 Escape Sequences. So, I thought I should share the difference between these two to clarify to all who may hay have confusion like me. Thanks to Shabbir too...... The Difference There are a few characters which can indicate a new line. The usual ones are these two: * '\n' or '0x0A' (10 in decimal) -> This character is called "Line Feed" (LF). * '\r' or '0x0D' (13 in decimal) -> This one is called "Carriage return" (CR).Different Operating Systems handle newlines in a different way. Here is a short list of the most common ones: * DOS and WindowsThey expect a newline to be the combination of two characters, namely '\r\n' (or 13 followed by 10). * Unix (and hence Linux as well) Unix uses a single '\n' to indicate a new line. * Mac Macs use a single '\r'. This difference gives rise to a number of problems. For example, a file created under Unix (so with newlines as a single LF) will not open correctly under Window's Notepad. Any Windows program that expects newlines to be CRLF will not work correctly with these files. To unify things a bit, so that writing portable C/C++ programs is possible, file streams have both a "translated" and an "untranslated" mode. If you open a file in translated mode, the runtime library will convert a '\n' to the appropriate newline character(s). If the following program is compiled under Unix, the file will contain a single LF to indicate the newline. If it's compiled under windows, it will contain a CRLF. Code: #include <stdio.h> #include <stdlib.h> int main() { FILE *fp = fopen("testfile.txt", "w"); fprintf(fp, "Hello World\n"); fclose(fp); return 0; } If you look at the generated file with a hex editor, you will see that the windows version has generated the following: Code: H e l l o W o r l d CR LF 0x48 0x65 0x6C 0x6C 0x6F 0x20 0x57 0x6F 0x72 0x6C 0x64 0x0D 0x0A So file streams are handled in a transparent way, provided of course that you only handle files compatible with your operating system. But many times you have to pass multi-line strings directly to some system functions. In practice In Windows you have to pass multi-line strings with '\r\n', otherwise the system functions don't recognize them correctly as multi-line. This is true e.g. for setting the text of Edit controls, Labels, Windows etc. Also, when you read multi-line text from a file that initially contains '\r\n' in translated mode, the string in memory will contain only a single '\n'. See for example the documentation on MSDN about 'fread()': If you want to be able to read text files written on different operating systems, you have to open the file in binary (= untranslated) mode and check for the different newlines yourself.
I have reported the article for Nominate your favorite article of the month for December 2007. Add your nominations as well.