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

程序如下:

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

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

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

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

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

c fopen fread 错误的更多相关文章

  1. 007PHP文件处理—— 判断文件与操作文件fopen fread fclose is_executable is_readable is_writeable

    <?php /** * 判断文件与操作文件fopen fread fclose * is_executable is_readable is_writeable */ //判断一个文件是不是一个 ...

  2. fopen,fread和fwrite

    在最近的编程练习和写东西的过程中,常常用到了fopen和fread两个函数来读取本地文件.之前使用这两个函数时,一直没有出现过什么问题.也是因为没有出现问题,对这两个函数的用法的一些细节没有很了解,所 ...

  3. fopen\fread\fwrite\fscanf\fprintf\fseek\feof\rewind\fgets\fputc等系列函数使用总结

    转载自:http://blog.csdn.net/xidianzhimeng/article/details/23541289 1 fopen 函数原型:FILE * fopen(const char ...

  4. fopen\fread\fwrite\fseed函数的使用

    使用 <stdio.h> 头文件中的 fopen() 函数即可打开文件,它的用法为: FILE *fopen(char *filename, char *mode); filename为文 ...

  5. 连续使用两次fread 错误和fread返回值

    今天在写一个代码,要把一帧的buffer读入到文件,因为有NEON和OpenCL两种不同的实现所以需要读取文件两次,代码如下: FILE *file; ; INTER_BLOCK_SIZE_GPU_R ...

  6. 读写大“二进制”文件,不必申请很大内存(fopen,fread,fwrite,fclose)

    <?php /** * 读写大二进制文件,不必申请很大内存 * 只有读取到内容才创建文件 * 保证目录可写 * * @param string $srcPath 源文件路径 * @param s ...

  7. fopen /open,read/write和fread/fwrite区别

    fopen /open,read/write和fread/fwrite区别         转载URL:http://hi.baidu.com/%B9%C8%C9%F1%B2%BB%CB%C0jdp/ ...

  8. linux缓冲的概念fopen /open,read/write和fread/fwrite区别

    fopen /open区别 UNIX环境下的C 对二进制流文件的读写有两套班子:1) fopen,fread,fwrite ; 2) open, read, write这里简单的介绍一下他们的区别.1 ...

  9. open/fopen read/fread write/fwrite区别

    fopen /open区别 UNIX环境下的C 对二进制流文件的读写有两套班子:1) fopen,fread,fwrite ; 2) open, read, write这里简单的介绍一下他们的区别.1 ...

随机推荐

  1. MFC让进程利用所有处理器核心

    参考资料: http://blog.csdn.net/baodi_z/article/details/1857820 http://blog.csdn.net/cbnotes/article/deta ...

  2. 使用 WebSphere ILOG JRules 开发保险应用系统

    使用 WebSphere ILOG JRules 开发保险应用系统 概述 保险行业在国内是一个充分竞争的行业,竞争的加剧导致保险公司的业务管理等各项费用在增长.而保险公司业务支撑系统的先进性与灵活支撑 ...

  3. [转]bootstrapTable refresh 方法使用简单举例

    原文地址:https://blog.csdn.net/lanyang123456/article/details/55805478 本文就bootstrapTable refresh 方法如何传递参数 ...

  4. Java实现图片添加水印

    参考别人的感觉挺好玩,还没仔细研究,先上代码. package WaterMark; import javax.imageio.ImageIO; import java.awt.*; import j ...

  5. mongo源码学习(三)请求接收传输层

    在上一篇博客中(mongo源码学习(二)db.cpp之mongoDbMain方法分析),我们把db.cpp中的mongoDbMain的执行过程分析了一下,最后会调用initAndListen(serv ...

  6. C++生成全局唯一Guid

    在软件开发中,我们经常需要一个唯一标识来标识一个对象,在PHP中,可以用UUID来获得全局唯一的ID,其实C++也内置了简单的GUID获得办法,猜想GUID应该是本机的特征以及运行的时间的一个哈希值, ...

  7. 使用EmbeddedValueResolverAware读取配置文件内容

    在基于Spring获取properties文件属性值的时候,一般使用@Value的方式注入配置文件属性值,但是总是需要引入这些多余的变量,有点不爽,今天研究了下,基于Spring解析@Value的方式 ...

  8. 关于C3P0容错和自动重连特性的研究

    转载: http://blog.csdn.net/cutesource/article/details/5422093 最近常有数据库和网络设备升级和搬迁等事情,而各个应用都是基于数据库连接池做的,大 ...

  9. JProfiler远程监控Linux上Tomcat的安装过程细讲(步骤非常详细!!!)

    JProfiler远程监控Linux上Tomcat的安装过程细讲(步骤非常详细!!!) 1.文件准备: 服务器:CentOS Linux release 7.3.1611 (Core)     Apa ...

  10. Extjs4.x (MVC)Controller中refs以及Ext.ComponentQuery解析

    refs : Object[]5 Array of configs to build up references to views on page. For example: Ext.define(& ...