红联Linux门户
Linux帮助

回车和换行,以及不同软件对敲回车键的操作

发布时间:2017-04-10 09:53:44来源:linux网站作者:charles_neil
我一直以为回车和换行是一个东西,因为可以通过敲击回车键来达到换行的效果,于是就奇怪怎么回车\n和换行\r怎么会用两种不同的符号,分别对应两个ASCII码。现在总算搞明白了,参考:
回车和换行,以及不同软件对敲回车键的操作
 
回车和换行
回车(carriage return)原意为返回光标到本行开头,换行(new line)即在当前行下面建立一个新行,光标下移。
上一个例子说明回车和换行
printf("this is return \rthis is newline\ncan you see?");
-------------
output:
this is newline
can you see?
-------------
从例子中可以看到\r将光标移到行首,\n建立新行。
 
Linux和Windows对敲击ENTER键的反应
 
Ubuntu
我在ubuntu16.04下新建了一个名字为Linux.txt的空文件,查看文件大小:0byte
然后我用gedit在ii.txt里面写入了一个字符i ,保存,然后返回查看大小:2byte
问题来了:这是为什么,一个字母不应该占据2个byte啊?
#include <stdio.h>
int main(void)
{
FILE * fp;
fp = fopen("/media/eureka/Azure/linux.txt", "r");
while(1)
{
char c;
c = getc(fp);
if (c == -1)
{
break;
}
printf("%d\n", c);
}
fclose(fp);
printf("\n");
return 0;
}
-------
output:
105
10
-------
结论:linux会在你保存文本文件时在文本文件尾自动插入一个换行符\n 而下次再次对文件进行添加时是在这个文件尾换行符之前添加的。
 
Windows
再来看Windows,以下对文件的操作都是用记事本完成的。
在我的win10下新建一个文本文档a.txt,输入一个字母,大小为1byte
新建一个b.txt,打开文件,按一下ENTER键,保存退出,大小为2byte
新建一个c.txt,打开文件,输入一个字母,按一下ENTER,保存,大小为3byte
结论:在保存文件时,Windows不会在文本文件尾插入任何字符。但是windows下面按下回车键会插入两个字符,经验证为\r\n
 
当我在ubuntu下对a.txt文件追加了一个ENTER键之后,文件的大小变为3byte,这是正常的(敲击ENTER插入一个\n 然后linux自动在文件尾又插入一个\n)。但是当我对b追加一个ENTER键时,文件大小变成了6byte,查一下结果是此次操作添加了两次\r\n ,推测这应该是linux检测到这是windows下的文件,而将后来要用到\n 的地方都换成了\r\n ,比如保存文件时自动插入的不再是\n 而是改成\r\n
经过后来的又一番折腾,发现对文件末尾进行插入这个操作是因编辑器而异的,教训:以后有些小事能放则放,程序员哪来那么多精力和时间。
 
本文永久更新地址:http://www.linuxdiyf.com/linux/29872.html