Linux系统与Windows系统中的回车与换行问题

来源:互联网 发布:阿里云的域名如何解析 编辑:程序博客网 时间:2024/05/16 18:01
首先定义两个名词:
回车:回到当前行的开头却不向下移一行
换行:就是光标下移一行却不会移到这一行的开头
 
然后我们做几个实验:
在Linux系统下用gcc编译如下C源程序并执行生成的可执行文件,可以得到一个文本文件test.txt:
#include <stdio.h>#include <stdlib.h>int main(){FILE *fp;if((fp = fopen(“test.txt”,“a”)) == NULL){printf(“cannot open file\n”);exit(0);}fputs(“asd\n123”,fp);fclose(fp);return 0;}

在Linux系统下打开test.txt,看到的结果如下:
asd
123
在Windows系统下打开test.txt,看到的结果如下:
asd123
 
用十六进制方式查看test.txt   $ od –t x1 test.txt    得到如下结果:
61 73 64 0a 31 32 33
可以看到,在第一行的末尾、第二行的开头之间只有一个字符0a,即LF(换行符,C语言中的\n)
 
在Windows系统下创建一个文本test0.txt,文本的内容如下:
asd
123
将test0.txt在Linux系统下用十六进制方式查看,得到如下结果:
61 73 64 0d 0a 31 32 33
可以看到,在第一行的末尾、第二行的开头之间有两个字符0d 0a,即CR(回车符,C语言中的\r)和LF(换行符,C语言中的\n)
 


在Windows系统下用VC6.0编译运行如下C源程序,可以在d盘下得到一个文本文件test1.txt:
#include <stdio.h>#include <stdlib.h>int main(){FILE *fp;if((fp = fopen(“d:\\test1.txt”,“a”)) == NULL){printf(“cannot open file\n”);exit(0);}fputs(“asd\n123”,fp);fclose(fp);return 0;}

在Windows和Linux系统下打开test1.txt,得到相同的结果如下:
asd
123
 
将test1.txt在Linux系统下用十六进制方式查看,得到如下结果:
61 73 64 0d 0a 31 32 33

综上:
C语言中统一用\n一个字符来完成回车和换行的功能,这是与操作系统无关的。
Windows系统中用\r\n两个字符完成回车和换行的功能。
Linux系统中用\n一个字符完成回车和换行的功能。
所以不要在Windows系统中编辑好文件之后,再上传到Linux系统中使用,这样容易产生问题。