Linux和windows换行符区别及使用说明

Linux和windows换行符区别及使用说明

   windows下的文件换行是以 "\r\n"结束的, 而linux这种unix系统是以"\n"结束的。

“r”所对应的英文单词为"return",意为换行;“n”所对应的英文单词为"newline"意为新行,呵呵都一个意思。

   之所以,UNIX系统下省略了“\r”是因为,UNIX的创立者觉得微软的这一套"\r\n"作为换行标识符比较占用存储空间,更重要的一点是浪费宝贵的寄存器的空间(因为系统读取文本是要经过cpu处理的,这就会占用寄存器空间),大家要知道几十年前,寄存器的容量是很小的,而且造价高昂(当然现在也好不到哪里去)。

   为了验证这一点,可以写一个简单的小列子测试一下:

   分别在windows下和Linux下新建文本windows.txt、linux.txt并向两了文件中写入内容:

   hello

   world

  这时用EditPlus编辑器分别打开windows.txt和Linux.txt,并以十六进制形式查看两者的文件内容。

  windowx.txt内容如下:


  Linux.txt内容如下:


 注:"\r"对应的十六进制编码为:0D;“\n”对应的十六进制编码为:0A

     正因为如此,linux系统下的文件在Windows里打开的话,所有文字会变成一行;而Windows里的文件在Linux下打开的话,在每行的结尾可能会多出一个^M符号(这是Linux等系统下规定的特殊标记,占一个字符大小,不是 ^ 和 M 的组合,打印不出来的)。所以unix的文本到windows会出现换行丢失; 而反过来就会出现^M的符号了。

   注:在这里,我用vim编辑器打开windows.txt并未看到有“^M”字符,用":/\r"命令查找“\r”字符也没找到,我在想是不是vim编辑器自动的把"\r"字符给过滤了。在此留个疑问,如果哪位读者知道答案,可以告诉我下。

   linux下如何删除windows换行符^M

     要将a.txt里的^M去掉并写入b.txt,则使用如下指令cat a.txt | tr -d "^M" > b.txt
    注意:语句中的^M是通过ctrl+V, ctrl+M输入的。特指/r字符


  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
6-2 *删除行末空白字符 分数 15 作者 李祥 单位 湖北经济学院 有少数初学者编程时,没有留意行末多余的空白字符,这不是好的编程习惯。现在请你编写一个函数,把初学者源程序文件中每行末尾多余的空白字符全都删去。 函数原型 // 删除行末空白字符 void Cut(FILE *src, FILE *dst); 说明:参数 src 和 dst 均为文件指针,其中:src 指示初学者的源程序文件,dst 指示整理后的源程序文件。 注: 源程序中所能输入的空白字符仅限于空格符 ' ' (<SP>) 和 制表符 '\t' (<HT>)。 最后一行末尾可能没有换行符。 每一行的长度不限。 在 Unix 或 Linux 系统下,源程序文件每行末尾为一个换行符 '\n' (<LF>),而在 Dos 或 Windows 系统下,源程序文件每行末尾为一个回车符 '\r' (<CR>) 和一个换行符 '\n' (<LF>)。 裁判程序 #include <stdio.h> #include <ctype.h> #include <string.h> // 删除行末空白字符 void Cut(FILE *src, FILE *dst); int main() { char sname[1024], dname[1024]; FILE *sfile, *dfile; gets(sname); gets(dname); sfile = fopen(sname, "rb"); if (!sfile) { printf("%s 无法打开!\n", sfile); } dfile = fopen(dname, "wb"); if (!dfile) { printf("%s 无法打开!\n", dfile); } if (sfile && dfile) { printf("正在整理..."); Cut(sfile, dfile); puts("整理完成!"); } if (sfile) { fclose(sfile); } if (dfile) { fclose(dfile); } return 0; } /* 你提交的代码将被嵌在这里 */
05-28

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值