windows文本文件回车换行处理

    在不同的操作系统中,换行符的存储方式不同,如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;
}


100803193244.jpg

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

100803193258.jpg

 

 


转载于:https://www.cnblogs.com/yunnotes/archive/2013/04/19/3032455.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值