linux与windows回车换行问题

文章作者 100test 发表时间 2007:12:21 12:42:18
来源 100Test.Com百考试题网


  所谓回车、换行这些控制符,都是从以前的电传打字机的控制命令继承下来的。回车就是打印头复位,换行就是走纸。Dos/Windows和Unix/Linux对回车、换行的理解差别就在于Dos/Windows认为0d=0d0a=0a,而Unix/Linux坚持沿用电传打字机的工作方式(这个其实是比较正确的)。
 
  所以在回车换行在Linux中是"0d",在Windows中是"0d0a".我们可以通过下面的程序测试一下:

CODE:

#define MAX_LENGTH 15536

#include 

#include 

using namespace std.

string delEnter(const string src) // 过滤掉串中的回车换行符

{

string des.

for(int i = 0. i < src.length(). i  )

{

char tempChar = src[i].

if( tempChar!=10 &.&. tempChar!=13)

des.append(1,tempChar).

} 

return des.

} 

int main()

{

char html[MAX_LENGTH] = "".

FILE *fp = fopen("Linux.txt", "rb"). //FILE *fp = fopen("Windows.txt", "rb").

char buf[16384].

while (fgets(buf, 16384, fp))

strcat(html, buf).

strcat(html,"\0").

string s(html).

cout << "string is: " << s << endl..

cout << "The size of string is: " << s.length() << endl.

cout << "after del string is: " << delEnter(s) << endl.

cout << "The size of string is: " << delEnter(s).length() << endl.

fclose(fp).

return 0.

}

  程序中文件Linux.txt是从Linux系统中copy过来的。我们可以通过这个程序观察到,通过过滤掉回车换行符,Linux文件中的字符数的减少等于其行数,而
 
  Windows中等于其行数的两倍。但有一个问题要注意,程序中行:
 
  CODE:

FILE *fp = fopen("Linux.txt", "rb").

不能写成:

FILE *fp = fopen("Linux.txt", "r").

  后者默认的文件打开方式是文本方式,这时系统自动对文本进行了转换,就不能得到上述的结论。



相关文章


建立linux两用户之间的信任关系
linux与windows回车换行问题
Linux系统下设置环境变量三法
使用Msmtp mutt shell发邮件
Linux操作系统下实现网卡冗余
解决ChartDirectorLinux下中文显示问题
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛