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

来源:互联网 发布:windows阻止此软件 编辑:程序博客网 时间:2024/05/17 18:11

我一直以为回车和换行是一个东西,因为可以通过敲击回车键来达到换行的效果,于是就奇怪怎么回车\n和换行\r怎么会用两种不同的符号,分别对应两个ASCII码。现在总算搞明白了,参考文章。

回车和换行

回车(carriage return)原意为返回光标到本行开头,换行(new line)即在当前行下面建立一个新行,光标下移。

上一个例子说明回车和换行

printf("this is return \rthis is newline\ncan you see?");-------------output:this is newlinecan 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:10510-------

结论: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

经过后来的又一番折腾,发现对文件末尾进行插入这个操作是因编辑器而异的,教训:以后有些小事能放则放,程序员哪来那么多精力和时间。

0 0