文本或代码中 \n 和 \r 的区别
我们使用printf打印时基本都会用到 \n 和 \r 之类控制字符,比如:
printf("hello world!\r\n");
那你知道这些 \n 和 \r 的区别吗?
# 关于「 \n 」 和「 \r 」
在ASCII码中,我们会看到有一类不可显示的字符,叫控制字符,其中就包含\r 和 \n 等控制字符。
\n : 换行符(newline),另起一行,对应ASCII值10(缩写:LF)。
\r : 回车符(return),回到一行的开头,对应ASCII值13(缩写:CR)。
回车和换行来源:
在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意儿,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字符。要是在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失。
于是,研制人员想了个办法解决这个问题,就是在每行后面加两个表示结束的字符。一个叫做"回车",告诉打字机把打印头定位在左边界;另一个叫做"换行",告诉打字机把纸向下移一行。
这就是"换行"和"回车"的来历,从它们的英语名字上也可以看出一二。
# 「 \n 」 和「 \r 」差异
后来,计算机发明了,这两个概念也就被搬到了计算机上。那时,存储器很贵,一些科学家认为在每行结尾加两个字符太浪费了,加一个就可以。于是,就出现了分歧。
'\r'是回车,'\n'是换行,前者使光标到行首,后者使光标下移一格。通常用的Enter是两个加起来。
有的编辑器只认\r\n,有的编辑器则两个都认。所以要想通用的话,最好用\r\n换行。
在微软的MS-DOS和Windows中,使用“回车CR('\r')”和“换行LF('\n')”两个字符作为换行符;
Windows系统里面,每行结尾是 回车+换行(CR+LF),即“\r\n”;
Unix系统里,每行结尾只有 换行CR,即“\n”;
Mac系统里,每行结尾是 回车CR 即'\r';
所以我们平时编写文件的回车符应该确切来说叫做回车换行符;
#影响
一个直接后果是,Unix/Mac系统下的文件在Windows里打开的话,所有文字会变成一行;而Windows里的文件在Unix/Mac下打开的话,在每行的结尾可能会多出一个^M符号。
Linux保存的文件在windows上用记事本看的话会出现黑点。这个应该很多人都看到过,比如,Keil代码中直接显示换行符:
互相转换
在linux下,命令unix2dos 是把linux文件格式转换成windows文件格式,命令dos2unix 是把windows格式转换成linux文件格式。
在不同平台间使用FTP软件传送文件时, 在ascii文本模式传输模式下, 一些FTP客户端程序会自动对换行格式进行转换. 经过这种传输的文件字节数可能会发生变化。
如果你不想ftp修改原文件, 可以使用bin模式(二进制模式)传输文本。一个程序在windows上运行就生成CR/LF换行格式的文本文件,而在Linux上运行就生成LF格式换行的文本文件。
示例代码:
#include "stdio.h"int main()
{printf("hello,World");printf("\n");printf("\t");printf("#");printf("\r");printf("@"); return 0;
}
图解:
程序输出:
转自:strongerHuang
推荐阅读:
专辑|Linux文章汇总
专辑|程序人生
专辑|C语言
嵌入式Linux
微信扫描二维码,关注我的公众号
文本或代码中 \n 和 \r 的区别相关推荐
- python中%s和%r的区别
%s和%r的区别 %s和%r都可以用来转换字符串 %s -> str() %r -> repr() 具体区别如下: s = 'hello' # repr和str打印字符串结果 print( ...
- HTML中nbsp 和空格的区别?
在html代码中,使用转义字符 表示1个空格,而使用转义字符&表示 &. 1.在html代码中 和空格的区别: 在html代码中每输入一个转义字符 ...
- php代码中使用换行及(\n或\r\n和br)的应用
浏览器识别不了\n或\r\n,这两个换行符是文本换行符,文本文件有效;假设须要将结果输出到浏览器或打印到显示器,代码中使用br;假设仅仅是在源码中换行.则使用\n或\r\n,感兴趣的朋友能够了解下,也 ...
- 机器学习 文本分类 代码_无需担心机器学习-如何在少于10行代码中对文本进行分类
机器学习 文本分类 代码 This article builds upon my previous two articles where I share some tips on how to get ...
- 如何在R代码中找到一个值的行号
如何在R代码中找到一个值的行号? 例如: 在以下一组值中,如何在第4列中找到特定值的行号? 如何使用R代码命令找到列4中的值"1578"的行号. > mydata_2sex ...
- matlab创建符号常量出错,错误:代码中意外的符号/输入/字符串常量/数值常数/特殊...
这些错误意味着您试图运行的R代码或源代码在语法上是不正确的.也就是说,你有一个错误. 若要修复此问题,请仔细阅读错误消息.错误消息中提供的代码显示了R认为问题所在的地方.在原始代码中找到这一行,并查找 ...
- 【转载】 C++中回车换行(\n\r)和换行(\r)的区别
原文:http://blog.csdn.net/xiaofei2010/article/details/8458605 windows下的点一下回车,效果是:回车换行,就是\r\n unix系统下的回 ...
- 如何在android的XML和java代码中引用字符串常量
使用字符串(string)资源 在一个Android工程中,我们可能会使用到大量的字符串作为提示信息.这些字符串都可以作为字符串资源声明在配置文件中,从而实现程序的可配置性. 在代码中我 ...
- c++hello world代码_在 Rust 代码中编写 Python 是种怎样的体验?
作者 | Mara Bos,Rust资深工程师译者 | Arvin 责编 | 屠敏头图 | CSDN 下载自东方 IC出品 | CSDN(ID:CSDNnews) 以下为译文: 大约一年前,我发布了一 ...
最新文章
- [模拟]纺车的轮子 Spinning Wheels
- 九种浏览器端缓存机制知多少(转)
- Word插入Latex公式的几种方式~(TeXsWord、EqualX、Aurora、向Office插入LaTeX公式的工具)
- 一种创建进程间COM来启动IE的方式
- boost::is_straight_line_drawing用法的测试程序
- 用boost库实现traceroute小工具
- 12对胸椎对应体表标志_铁路信号之信号表示器及标志(三)
- 【渝粤教育】电大中专电子商务网站建设与维护 (8)作业 题库
- 精通 WPF UI Virtualization
- 字节跳动和腾讯不正当竞争案将于深圳开庭 抖音:我们也是看新闻才知道本月24日要开庭...
- JS中的大括号{}和中括号[]详解
- 视频分享:挨踢项目求生法则(2)——战略篇
- java微信公众号支付示例
- JavaWeb中的问题 ---- Servlet和Jsp
- 【计算机组织与体系结构】实验二:给定指令系统的处理器设计
- 重温设计模式二 设计原则之依赖倒置原则
- linux踢人命令 pkill踢人用法
- SQl server 2008 r2 迅雷下载地址
- ODX介绍(2)[ DiagLayerStructure]
- vasp测试计算机,求助:无法判断vasp测试是否完成
热门文章
- HBase的基础知识
- [傅里叶变换及其应用学习笔记] 九. 继续卷积的讨论
- Android -- WebView进度条
- 前端开发中那些不招人“待见”的功能
- [C++]MySQL数据库操作实例
- 安全四部曲之一---***工具简单使用
- 来自专业的RIA咨询strechmedia机构提供的Flex组件
- mac电脑php中安装swoole扩展件
- Java中BufferedReader和InputStreamReader
- mysql注入5.0以上_[Injection]对MYSQL 5.0服务器以上版本注入