您的位置:首页 > 运维架构 > Linux

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

2013-03-22 09:47 253 查看

本博客已迁往http://coredumper.cn

首先定义两个名词:

回车:回到当前行的开头却不向下移一行

换行:就是光标下移一行却不会移到这一行的开头

 

然后我们做几个实验:

在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系统中使用,这样容易产生问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: