Chinaunix首页 | 论坛 | 博客
  • 博客访问: 22210
  • 博文数量: 16
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 185
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-02 11:52
文章分类
文章存档

2011年(2)

2010年(10)

2009年(3)

2008年(1)

我的朋友

分类: WINDOWS

2010-08-03 19:35:01

    在不同的操作系统中,换行符的存储方式不同,如linux系统以\n表示,而Mac OS\r表示,windows系统则以\r\n表示,而C语言中,换行则以\n表示,故在不同的操作系统下用C语言读取文本文件时,需要做相应的处理,本文主要介绍windows系统下的处理。

1.  检查文件是否以文本模式打开,如果不是则不需要做特殊处理;

2.  循环依次读取文件中的字符,按以下规则对字符进行处理,直到读取到指定字符数:

1)       如果所读取字符为CTRL-Z,表明文本已经结束,退出循环;

2)       如果所读取字符不为\r,则直接将其复制到缓冲区;

3)       如果所读取字符为\r并且下一个字符不为\n,处理同(2);

4)       如果所读的字符为\r,且下一个字符为\n,则将\n拷贝到缓冲区,下次直接读取下下一个字符;

3.  如果缓冲区中最后一个字符为\r,则再从文件读取一个字符,并进行以下处理:

1)         如果没有读取成功,直接返回;

2)         如果是磁盘文件,且字符不为\n,用seek函数回退文件指针一个字节;

3)         如果是磁盘文件,且字符为\n,则丢弃缓冲区里的\r,存储\n

4)         如果是管道文件,且字符为\n, 处理同(3)

5)         如果是管道文件,且字符不为\n,则将\n存储在文件句柄的单字节缓冲里;

 

如下图所示,文本文件的内容为:

aaaaaaaaaaaaaa

   bbbbbbbbbbb

ccc

使用下面C语言代码,以二进制方式读取该文件,其输出内容为:

#include <stdio.h>

int main()
{
    FILE *fp = fopen("a.txt", "rb");
    char ch;
    while(fread(&ch, sizeof(ch), 1, fp) == 1) {
        printf("%d ", ch);
    }
    fclose(fp);
    return 0;
}


rb换成r,以文本方式读取该文件,其\r\n会被转换为\n,输出结果为:

 

 


阅读(887) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~