换行符‘\n’和回车符‘\r’

换行符‘\n’和回车符‘\r

顾名思义,换行符就是另起一行,回车符就是回到一行的开头,所以我们平时编写文件的回车符应该确切来说叫做回车换行符  

'\n' 10 换行(newline)
'\r' 13 回车(return)


也可以表示为'\x0a'和'\x0d'.(16进制)

在windows系统下,回车换行符号是"\r\n".但是在Linux等系统下是没有"\r"符号的。

在解析文本或其他格式的文件内容时,常常要碰到判定回车换行的地方,这个时候就要注意既要判定"\r\n"又要判定"\n"。

写程序时可能得到一行,将其进行trim掉'\r',这样能得到你所需要的string了。

 

由于还是无法理解换行回车的意思特引用以下文章:

\n是换行,英文是linefeed,ASCII码是0xA。
\r是回车,英文是carriage return ,ASCII码是0xD。

如果用过机械打字机,就知道回车和换行的区别!!
换行就是把滚筒卷一格,不改变水平位置。  
回车就是把水平位置复位,不卷动滚筒。


但是我们平时按得Enter到底是回车还是换行,不太清楚??
看到一种说法:windows下enter是 \r\n, unix下是\n, mac下是\r

在MS的系统中纯文本格式按一个回车键是输入了两个字符,一个回车一个换行。在LINUX系统中则只是一个回车。
以上内容参考了http://topic.csdn.net/t/20040617/23/3101951.html#和http://topic.csdn.net/t/20021113/09/1171659.html的讨论  

还有在编程时文件操作

wb(二进制方式)或者wt(文本方式)也会有影响。我做了个实验(实验用.net2003)
在01.txt文件中输入12然后enter,在ultraedit中看到的二进制是31 32 0d 0a

然后程序如下:

int mian()
{  
  FILE   *fp1,*fp2,*fp3,*fp4,*fp5,*fp6;   
 
  char a[10];
  char b[10];
   
  fp1   =   fopen("01.txt","r"); 
  fp3   =   fopen("02.txt","w"); 
  fread(a,sizeof(unsigned char),8,fp1);       //a里是31 32 0a
  fwrite(a,sizeof(unsigned char),8,fp3);      //02.txt里是31 32 0d 0a  ,原因是输入的情况下,换行回车转换成换行,然后输出时换行又会转成换行回车
  fclose(fp1);
  fclose(fp3);
  fp2   =   fopen("01.txt","rb");
  fp4   =   fopen("03.txt","wb");
  fread(b,sizeof(unsigned char),8,fp2);      //b里是31 32 0d 0a
  fwrite(b,sizeof(unsigned char),8,fp4);      //03.txt里是31 32 0d 0a ,原因是二进制情况下回车和换行的(类似文本方式的那种转换)是不存在的
 fclose(fp2);
  fclose(fp4);
  return   0;  
}

好像结论是这样的:读的方式下,在文本方式下,enter是0x0a;在二进制方式下,enter是0x0d,0x0a。

MSDN中查到这样的话:Also, in text mode, carriage return–linefeed combinations are translated into single linefeeds on input, and linefeed characters are translated to carriage return–linefeed combinations on output. (输入的情况下,换行回车转换成换行,然后输出时换行又会转成换行回车)When a Unicode stream-I/O function operates in text mode (the default), the source or destination stream is assumed to be a sequence of multibyte characters. Therefore, the Unicode stream-input functions convert multibyte characters to wide characters. For the same reason, the Unicode stream-output functions convert wide characters to multibyte characters.

Open in binary (untranslated) mode; translations involving carriage-return and linefeed characters are suppressed. (二进制情况下回车和换行的转换是不存在的).

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值