“回车”(carriage return)VS  “换行”(line feed)

在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字符。要是在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失。

于是,研制人员想了个办法解决这个问题,就是在每行后面加两个表示结束的字符。一个叫做“回车”,告诉打字机把打印头定位在左边界;另一个叫做“换行”,告诉打字机把纸向下移一行。

这就是“换行”和“回车”的来历,从它们的英语名字上也可以看出一二。

后来,计算机发明了,这两个概念也就被般到了计算机上。那时,存储器很贵,一些科学家认为在每行结尾加两个字符太浪费了,加一个就可以。于是,就出现了分歧。

Unix系统里,每行结尾只有“”,即“\n”;Windows系统里面,每行结尾是“”,即“\n\r”;Mac系统里,每行结尾是“”。一个直接后果是,Unix/Mac系统下的文件在Windows里打开的话,所有文字会变成一行;而Windows里的文件在Unix/Mac下打开的话,在每行的结尾可能会多出一个^M符号。

c语言编程时(windows系统)

\r 就是return 回到 本行 行首 这就会把这一行以前的输出 覆盖掉

如:

int main() {

cout << "hahaha" << "\r" << "xixi" ;

}

最后只显示 xixi 而 hahaha 背覆盖了

\n 是回车+换行 把光标 先移到 行首 然后换到下一行 也就是 下一行的行首拉

int main() {

cout << "hahaha" << "\n" << "xixi" ;

}

所谓回车、换行这些控制符,都是从以前的电传打字机的控制命令继承下来的。回车就是打印头复位,换行就是走纸。Dos/Windows和Unix/Linux对回车、换行的理解差别就在于Dos/Windows认为0d=0d0a=0a,而Unix/Linux坚持沿用电传打字机的工作方式(这个其实是比较正确的)。

所以在回车换行在Linux中是"0d",在Windows中是"0d0a".我们可以通过下面的程序测试一下:

上面的红色字体估计是原作者笔误,linux的换行符是\n,Ascii码是0a,而不是0d。至于要测试的话,可以使用od -t x1 文件名去查看。

而\r在linux下的vi看到的是蓝色的^M,是使用ctrl+m+v输出的,可以在命令模式中使用

:%s/^M//g删除,或者使用dos2unix去掉。

#define MAX_LENGTH 15536

#include

#include

using namespace std;

string delEnter(const string src) // 过滤掉串中的回车换行符

{

string des;

for(int i = 0; i < src.length(); i++)

{

char tempChar = src[i];

if( tempChar!=10 && tempChar!=13)

des.append(1,tempChar);

}

return des;

}

int main()

{

char html[MAX_LENGTH] = "";

FILE *fp = fopen("Linux.txt", "rb"); //FILE *fp = fopen("Windows.txt", "rb");

char buf[16384];

while (fgets(buf, 16384, fp))

strcat(html, buf);

strcat(html,"\0");

string s(html);

cout << "string is: " << s << endl;;

cout << "The size of string is: " << s.length() << endl;

cout << "after del string is: " << delEnter(s) << endl;

cout << "The size of string is: " << delEnter(s).length() << endl;

fclose(fp);

return 0;

}

程序中文件Linux.txt是从Linux系统中copy过来的。

我们可以通过这个程序观察到,通过过滤掉回车换行符,Linux文件中的字符数的减少等于其行数,而

Windows中等于其行数的两倍。但有一个问题要注意,程序中行:

FILE *fp = fopen("Linux.txt", "rb");

不能写成:

FILE *fp = fopen("Linux.txt", "r");

后者默认的文件打开方式是文本方式,这时系统自动对文本进行了转换,就不能得到上述的结论。

不过大家可以在Windows下用工具HexWorkShop,在Linux下用命令hexdump直接观察具体的二进制代码,更为直接。

关于回车和换行的历史。

回车和换行关于“回车”(carriage return)和“换行”(line feed)这两个概念的来历和区别。

在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字符。要是在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失。

于是,研制人员想了个办法解决这个问题,就是在每行后面加两个表示结束的字符。一个叫做“回车”,告诉打字机把打印头定位在左边界;另一个叫做“换行”,告诉打字机把纸向下移一行。

这就是“换行”和“回车”的来历,从它们的英语名字上也可以看出一二。

后来,计算机发明了,这两个概念也就被般到了计算机上。那时,存储器很贵,一些科学家认为在每行结尾加两个字符太浪费了,加一个就可以。于是,就出现了分歧。

Unix系统里,每行结尾只有“”,即“\n”;Windows系统里面,每行结尾是“”,即“\n\r”;Mac系统里,每行结尾是“”。一个直接后果是,Unix/Mac系统下的文件在Windows里打 开的话,所有文字会变成一行;而Windows里的文件在Unix/Mac下打开的话,在每行的结尾可能会多出一个^M符号。

Dos和windows采用回车+换行CR/LF表示下一行,

而UNIX/Linux采用换行符LF表示下一行,

苹果机(MAC OS系统)则采用回车符CR表示下一行.

CR用符号'\r'表示, 十进制ASCII代码是13, 十六进制代码为0x0D;

LF使用'\n'符号表示, ASCII代码是10, 十六制为0x0A. 所以Windows平台上换行在文本文件中是使用 0d 0a 两个字节表示, 而UNIX和苹果平台上换行则是使用0a或0d一个字节表示.

一般操作系统上的运行库会自动决定文本文件的换行格式. 如一个程序在windows上运行就生成CR/LF换行格式的文本文件,而在Linux上运行就生成LF格式换行的文本文件. 在一个平台上使用另一种换行符的文件文件可能会带来意想不到的问题, 特别是在编辑程序代码时. 有时候代码在编辑器中显示正常, 但在编辑时却会因为换行符问题而出错. 很多文本/代码编辑器带有换行符转换功能, 使用这个功能可以将文本文件中的换行符在不同格式单互换.

在不同平台间使用FTP软件传送文件时, 在ascii文本模式传输模式下, 一些FTP客户端程序会自动对换行格式进行转换. 经过这种传输的文件字节数可能会发生变化. 如果你不想ftp修改原文件, 可以使用bin模式(二进制模式)传输文本.

Linux和Windows的换行符

一直对换行符这个东西概念比较模糊,直到最近花了一点时间仔细研究了一下,才彻底搞清楚这个问题,本文前面介绍部分是外文转载,后面例子是个人总结,希望能对大家有一些帮助. 回车符号和换行符号产生背景 关于“ ...

Linux文件和windows文件在 换行符的区别

Linux或Unix文件,和windows文件,在来回处理时,如果不注意 换行符的区别,可能导致程序错误!!!深刻的教训.... 在早期的打印机时代,开始新的一行要占用两个字符的时间.如果到了一行的结 ...

git在不同平台windows、linux、mac 上换行符的问题

0.01 不同平台上换行符的问题 1,不同平台对换行符的制定不同 windows (carriage return AND line feed) “\n\r” CRLF Un ...

windows python文件拷贝到linux上执行问题-换行符问题&sol;r&sol;n

之前在Windows下写好了一个Python脚本,运行没问题,今天在Linux下,脚本开头的注释行已经指明了解释器的路径,也用chmod给了执行权限,但就是不能直接运行脚本. 1 问题1: 报错:: ...

windows下sed回车换行符处理

windows下sed回车换行符处理如果用sed for windows对整个文件进行了编辑,编辑之后一般需要处理回车换行符:rem windows的回车换行符是\r\n,linux的是\n,所以要替 ...

Linux- 关于windows和Linux和Mac的换行符

windows 的换行符为"\r\n" Linux的换行符为"\n" Mac的换行符为"\n\r",和Windows相反

linux和Dos下换行符转换

一.windows的文件到linux下的转换方法: 1. 用sed命令替换 sed -e 's/^M//g' original.txt > target.txt (注意^M 在Linux/Uni ...

菜鸟教程之工具使用(八)——EGit禁止自动转换回车换行符

众所周知,Windows和Linux系统的回车换行是不一样的.想要进一步了解它们的可以阅读下面的介绍,不感兴趣的可以直接跳过. 产生背景 关于“回车”(carriage return)和“换行”(li ...

【aardio】回车换行符

回车换行符 在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符.但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字 ...

随机推荐

iOS 版本号大小比较

NSString *num1 = @"5.2.0";    NSString *num2 = @"5.3.0"; if ([num1 compare:num2 ...

Linux sudo

200 ? "200px" : this.width)!important;} --> 介绍 本篇文章主要介绍sudo配置和用法,为了给某个用户控制权限比如执行某个命令或者关 ...

codeforces A&period; Vasily the Bear and Triangle 解题报告

题目链接:http://codeforces.com/problemset/problem/336/A 好简单的一条数学题,是8月9日的.比赛中没有做出来,今天看,从pupil变成Newbie了,那个 ...

【Java基础】构造方法调用构造方法

从一个程序开始: class dog { private String name; private String color; private int age; dog(String name) // ...

基于MySQL &plus; Node&period;js &plus; Leaflet的离线地图展示,支持百度、谷歌、高德、腾讯地图

1. 基本说明 本项目实现了离线展示百度.谷歌.高德.腾讯地图.主要功能如下: 实现了地图瓦片图下载.存储.目前支持存储至MySQL Node.js服务调用MySQL中的瓦片图 Leaflet展示地图 ...

usb描述符简述(二)

title: usb描述符简述 tags: linux date: 2018/12/18/ 18:25:23 toc: true --- usb描述符简述 转载自cnblog 具体描述符 https: ...

JS数组循环的性能和效率分析(for、while、forEach、map、for of)

从最简单的for循环说起 for( 初始化:条件; ){} 条件为Trusy 值时候,可以继续执行for 循环,当条件变为Falsy 时跳出for循环.for循环常见的四种写法const person ...

Tour HDU - 3488 有向环最小权值覆盖 费用流

http://acm.hdu.edu.cn/showproblem.php?pid=3488 给一个无源汇的,带有边权的有向图 让你找出一个最小的哈密顿回路 可以用KM算法写,但是费用流也行 思路 1 ...

在当前目录打开DOS命令窗口

Windows7系统:Shift + 鼠标右键 Windows10系统:Shift + 鼠标右键打开Power shell,在Power shell的命令窗口中输入:start cmd

C&num;高级编程----错误和异常的总结

错误和异常的总结 因为总结吗,,可能概念啥的比较多,大家要学着适应. 首先是C#中的异常用老处理系统级和用户级的错误状态,是一种结构化,统一的类型安全的处理机制. 因为鄙人开始想走C++的道路,所以搞 ...

windows处理回车和Linux,linux与windows回车换行符的区别相关推荐

  1. Linux换行符和Windows换行符的区别与转换

    不同系统文本文件的行尾换行符不同: Windows为一个回车'\r'(CR或^M)和一个换行'\n'(NL或LF)(括号内是其它显示方法) Linux为一个换行'\n' Mac为一个回车'\r' 查看 ...

  2. linux中如何看文件换行符,linux下的换行符

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 换行符在不同操作系统下有不同的表示,比如windows下是CR+LF连续两个字符,linux下为了节省空间用LF表示,m ...

  3. linux中sed如何替换换行符,linux sed命令,如何替换换行符“\n”

    linux sed命令,如何替换换行符"\n" 在一次sed使用中,执行命令: sed "s/\n//g" file 1 发现,没起到任何效果. 后来,经查se ...

  4. 回车与换行符的区别及python中使用

    一.区别 转载自http://www.pythontab.com/html/2017/linuxkaiyuan_0115/1116.html 1. 由来 在计算机还没有出现之前,有一种叫做电传打字机( ...

  5. 回车符,换行符的区别

    首先介绍一下"回车"(carriage return,'\r')和"换行"(line feed,'\n')这两个概念的来历和区别.在计算机还没有出现之前,有一种 ...

  6. WORD中将回车(^p)替换为手动换行符(^l)

    WORD中的"段落标记"(^p)和"手动换行符"(^l)都能起到换行的作用."段落标记"(^p)就是平常所说的回车,通过Enter键打出,在 ...

  7. linux与windows回车换行符的区别

    Unix系统里,每行结尾只有"<换行>",即"\n":Windows系统里面,每行结尾是"<换行><回车>&quo ...

  8. window 系统上传文件到linux 系统出现dos 格式换行符

    Windows里的文件在Unix/Mac下打开的话,在每行的结尾可能会多出一个^M符号,Unix/Mac系统下的文件在Windows里打开的话,所有文字会变成一行,所以为了避免这种情况的发生,我们可以 ...

  9. linux删除文件最后一行换行符,linux - 使用sed删除最后一个换行符 - 堆栈内存溢出...

    1)从文件中删除最后一个空行: 首先,您当前使用的命令将删除所有空行和空行! 不只是最后一个. 如果要删除最后一行为空/空白的行,则可以使用以下命令: sed '${/^[[:blank:]]*$/d ...

  10. linux中shell如何输出换行符

    echo -e "a\tb\tc\nd\te\tf"

最新文章

  1. 简单算法题:leetcode-2 两数相加
  2. linux 桌面显示视频播放器,Ubuntu 13.10开启媒体播放器VLC桌面通知的步骤
  3. RUNOOB python练习题44
  4. LinkedHashSet类
  5. python实现matlab_用matlab和python实现符号运算
  6. matlab2012安装过程中退出,Matlab 2012安装图解
  7. (原創) 如何破解Quartus II 6.0? (IC Design) (Quartus II) (Nios II)
  8. 神秘诡异的量子世界是如何毁掉科学家三观的?
  9. 会议安排问题C++贪心算法
  10. html怎么定义submit,HTML Input Submit value用法及代码示例
  11. 单片机c语言延时程序计算,单片机 计算延时子程序执行时间
  12. idea报错:fatal: –author ‘user@mail.com’ is not ‘Name ’ and matches no existing author
  13. 爬取猫眼票房数并数据可视化
  14. Idea中文件图标发生变化,导致文件显示出现异常
  15. 6个免费PPT模板网站,简直不要太好用
  16. Kafka从零开始 (Kafka是什么?)
  17. 转行学什么就业前景好
  18. 设计一个长方体类Cuboid(Java)
  19. kali中文乱码解决方法
  20. 硬币组合问题python_动态规划之硬币组合问题

热门文章

  1. 火狐firebug,firepath以及Selenium IDE插件安装方法
  2. Linux安全加固的常用方法
  3. python参考手册下载_python学习手册下载|
  4. WIN10 安装Eplan 2.7 没有可激活合适的加密狗 的异常解决办法
  5. 基于HFSS阵列天线设计
  6. CorelDRAWX4的VBA插件开发(十三)一键转曲(转全部页面)
  7. 计算机中丢失无法开机密码,手把手教你“电脑开机密码忘记了,无法登录”的解决方法...
  8. GAN生成的人脸数据集
  9. adobe黑体std能商用_adobe字体版权?
  10. com.lowagie.itext pom 2.1.7.js6