zoukankan      html  css  js  c++  java
  • c fopen fread 错误

    真的被,读取一个txt文本,结果一个早上都没搞好

    程序如下:

    能看出哪里有问题么,输出字符串,得到的结果后面有“屯”或则 “烫”,单个字符输出来也有,为何,搜啊搜,改txt的内容,依旧不行

    最后 改fopen 的r 改为rb就可以了,神奇了,明明txt就是ascii码文件啊,为什么要改成rb啊,b是二进制的意思啊

    再搜,论坛里面高人说了:

    二进制打开之后可以使用fgets,ascii打开之后也可以使用fwrite。
    区别就是
    “只不过回车符有点不一样。一个是0x0a,一个是0x0d 0x0a。具体哪个是哪个我也记不得了。”

    二进制方式打开
    1、会把所有字符都读出来,包括:回车,换行,'',直到文件结束,才停止读;
    2、可以完全读出所有类型的文件,包括:exe,dll,ocx......
    ascii方式打开,当遇到以下字符:
    1、回车,换行,'',则当前一行文本的停止读的地方,直到本行结束,都不能读出,接着读下一行;
    2、只能正确读出文本文件。

    要求两个对应:
    1  是操作函数与打开方式对应,如 使用fread/fwrite 则要使用2进制方式操作文件,
       如果使用的是 文本方式(ascii)可能会出错 ...
    2  文件的读 和写方式对应,一个文件写的时候是 2进制方式的,那么读取的时候也用2进制方式,否则可能获取的数据会有差别,差别的来源就在于 两种操作方式的差别:一个直接作为2进制流(2进制方式)操作, 一个是以字符流方式操作(ascii) ...

    这哪里是二进制打开和文本打开的区别,明明是dos和unix回车符号的区别。

    我来总结下:其实fopen打开文件 什么  “rb”  “rt”  “r” 这些其实不分文本文件和二进制文件的,但是你使用二进制打开文件,你就不要用fputs  fgets 这样ascii的操作函数,你得用fread  fwrite

    同样的,你用ascii码方式打开文件,那么你就不要用fread,我就是犯了这样的错误

    mark::

  • 相关阅读:
    MFC Bitmap::FromBITMAPINFO返回空问题
    String成员函数
    用xshell连接l自己的inux
    回调函数
    文件操作相关函数(POSIX 标准 open,read,write,lseek,close)
    Linux_GDB调试学习笔记
    程序中的一些限制(基于Linux系统C语言)
    第10课:[实战] Redis 网络通信模块源码分析(3)
    第09课:【实战】Redis网络通信模块源码分析(2)
    简单模拟多段线绘制Pline命令过程的撤销功能
  • 原文地址:https://www.cnblogs.com/dragon2012/p/3978751.html
Copyright © 2011-2022 走看看