原文地址:http://blog.sina.com.cn/s/blog_65db99840100kidc.html
DOS文件(windows格式文件)中,按一下ENTER就是输入了\r\n,这就是回车换行
MAC文件里,用\r换行
UNIX文件里,用\n换行
自己尝试了一些\r \n的组合,归纳了下规律:
windows下用文本方式写文件时
缓冲区里的\n或者\r都会被自动替换为\r\n写入文件,即使是连着的\r\n,也会被替换成\r\n\r\n(但是msdn上面只说\r被替换为\r\n,我的前面一篇博文里有原文)
windows下用文本方式读文件时
文件中的\r\n自动替换为\n存放到缓冲区里(这点和msdn是符合的,前面的博文里有原文)
\r不会被替换
假设要读取的文件流长度小于缓冲区长度
如果用fread文本模式读文件,\r\n被替换为\n读进缓存区里
如果是fgets文本模式读文件,碰到第一个\n(这里的\r和\n都是指经过转换后读入缓冲区的,即\r\n被替换为\n)后停止读取,缓存区里存放的是\n之前的字符串(包括这个\n以及之前所有的\r)
fread和fwrite的返回值问题
文本模式写文件时,\n或\r自动替换成\r\n,但是fwrite的返回值里还是算写了一个字符(和msdn符合,前面一篇博文有原文)
文本模式读文件时,\r\n被自动替换为\n,但是也算是读了一个字符(和msdn的不一样,msdn是说算读了2个,前面的博文里有原文)
如果用UltraEdit打开文本文件有时候会碰到询问你是否要转换为DOS文件,其实就是回车换行符的问题了。做了如下表的尝试,但是规律不太好总结啊。
要写入的字符 |
实际写入的字符(即\n被替换为\r\n后) |
Ultraedit转换为DOS格式后的文件内的实际字符 |
\r |
\r |
\r\n |
\n |
\r\n |
未提示转换为DOS文件 |
\r\n |
\r\r\n |
\r\n |
\n\r |
\r\n\r |
未提示转换为DOS文件 |
\n\r\n |
\r\n\r\r\n |
\r\n\r\n |
\n\r\n\r |
\r\n\r\r\n\r |
\r\n\r\n |
\n\r\n\n\r |
\r\n\r\r\n\r\n\r |
\r\n\r\n\r\n\r\n |
\r\r\n\n |
\r\r\r\n\r\n |
\r\n\r\n\r\n |
\r\r\r\n\r\n |
\r\r\r\r\n\r\r\n |
\r\n\r\n\r\n\r\n |
\n\r\r |
\r\n\r\r |
\r\n\r\n\r\n |
\n\r\r\r\r |
\r\n\r\r\r\r |
\r\n\r\n\r\n\r\n\r\n |