这个东西其实很简单,写篇东西出来只是让自己记住这些基本的知识,以前从来没有意识去可以记一些东西,但是发现这样是不行的,离开网络就不能编程了,而且这样也影响编程过程的整体和效率,借此机会,记录、记住。
\r 回车,将光标回到行首。 即return的首字母。 ASCII码值为 0x0D。
\n 换行,将光标换至下一行。 即newline的首字母。ASCII码值为0x0A。
我们平时用电脑已经习惯了回车换行一次搞定,敲一个回车键(Enter),既是回车,又是换行。但是在早期的打字机上,另起一行打字需要两个步骤,首先发送"\r"命令将打字头复位,即回车,然后再发送命令"\n"让打字机走纸移到下一行,这个历史遗留问题导致了我们在DOS-Windows的系统要区分"\r\n"和"\n"。
经过自己在Vc6.0环境下测试,
#include <stdio.h>
int main(int argc, char* argv[])
{
printf("test\r123");
return 0;
}
输出结果为
发现没有后面的t了,可能是缓存的原因。
#include <stdio.h>
int main(int argc, char* argv[])
{
printf("test\r123");
printf("\n");
return 0;
}
输出结果为
这样就将 t输出了,原因自己琢磨吧。。。。
最后证明一点
#include <stdio.h>
int main(int argc, char* argv[])
{
printf("test");
printf("\n");
printf("123\n");
return 0;
}
结果为:
这样大家就明白了吧,最起码我感觉:现在的"\n"把"\r\n"的事情都做了!
查阅资料补充:
在不同的操作系统,文本文件的格式是有区别的,如 在DOS-->Windows的文本文件中,使用了/r/n(0x0D 0x0A)来表示回车并且换行, 在Unix-->Linux的文本文件中,使用/n(0x0A)来表示回车并且换行, 在基于文本的通信协议定义时,对/r/n的使用有严格的定义,如在HTTP中,标识一行的结束,必须使用/r/n。
按图索骥,查了一下msdn关于fread()函数的说明.有一句话 If the given stream is opened in text mode, carriage return–linefeed pairs are replaced with single linefeed characters.也就是我以文本方式打开,函数会将/r/n转换成/n.要想看到/r/n应该以二进制方式打开。
哦,查阅发现,有的人写的是"/r" 和“/n” ,我用的是"\r"和"\n"。 我想可能就是不同语言的转义字符的定义不同,前者为"/" 左斜杠,后者为"\"右斜杠。
好了,就到这里了。
本文有参阅网友的文献,鸣谢!