fread总返回0的问题

windows环境下使用fread遇到的奇怪问题 使用C库函数fopen、fread进行文件的操作,是大家都熟悉的处理方式。但最近在公司的实际项目中发现了一个很奇怪也很有趣的现象。 公司的项目使用VC编写前置程序,对客户传来的报文进行字符集转码操作。在转码过程中使用了临时文件。问题出现在临时文件读取过程中。代码很简单: FILE *fp; //chenzw:test fp = fopen(utf8file,"r"); if ( 阅读详情

 

 size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);

这个函数以前一直没理解为什么 size_t size, size_t nmemb参数来确定读取缓冲区的大小,我开始以为两个可以互换,而且在有些场合互换确实也没问题,直到今天碰到了打开一个文件,读取的长度总是返回0。

事例代码如下:

char buffer[1024*100];

FILE*fp=fopen("1.jpg","r");

int lenbuffer=fread(buffer,1024*100,1,fp);

printf("filesize=%d/n",lenbuffer);

fclose(fp);

 

返回值总是0,我一直以为是打开文件失败,其实不是

在函数fread中的每次读取size_t大小的数据放到缓冲区,最多为nmemb个,所以返回值其实是读取了多少个size_t大小的数据块,这里由于我的文件小于100k,所以读取总是没有够一个1024*100大小的数据块,返回肯定是0了,这里其实是想返回读取的字节数,可以修改fread如下:

int lenbuffer=fread(buffer,1,1024*100,fp);

这里就是每次读取一个字节,最多读取1024*100,最后返回值就是读取的字节数了

 

5G NR协议栈及功能1 - 体架构与物理层   备注:本文所有图片均来自3GPP标准,包括3GPP TS 38.300 V15.0.0 (2017-12)和3GPP TS 38.202 V15.0.0 (2017-12)等。本文主要介绍截止目前(2018年1月25日),3GPP 5G NR相关的协议内容,后期可能会有更新。   本系列共分为两部分:   1. 5G NR协议栈及功能1 - 体架构与物理层 http://blog... 阅读详情

相关推荐

基于溶解气体分析(DGA)的变压器DGA数据故障诊断含代码含数据

在拥有可靠的DGA数据的前提下,结合机器学习分类算法,可以实现变压器的故障诊断。在此数据集的基础上,用随机森林跑出的结果如图。

Jason_Orton的博客 2583

fread 返回 0

fread 函数一直返回 0,检查过读取的数量不会超过文件大小,错误发生在打开文件时错误。 错误代码如下: FILE *in_file, *out_file; unsigned int open_files(const char *in_file_name, const char *out_file_name) { if( in_file = fopen(in_file_name,...

cyang's blog 4695

为什么fread(),fwrite()的返回值是为0,但是读写文件正常

为什么fread(),fwrite()的返回值是为0,但是文件读写正常 初学C语言文件操作的新人,会犯这个错误,明明文件读 写成功 ,但是返回值是为0,而不是读写成功的字节数,原因是因为...

c语言程序返回值0,c语言fread()返回0?

HUWWW1、返回0通常是读到了文件尾。如果确认没有到文件尾,可以用ferror检查错误。if ( ferror ( fp ) ){printf("File read error.");}2、C语言中:fread是一个函数。从一个文件流中读数据,最多读取count个元素,每个元素size字节,如果调用成功返回实际读取到的元素个数,如果不成功或读到文件末尾返回 0。函数原型:size_t fread...

weixin_28913137的博客 3597

遇到C语言内存错误怎么办?一定要找准这六个原因

一、没有为指针分配内存 定义了指针变量,但是没有为指针分配内存,即指针没有指向一块合法的内存。浅显的例子就不举了,这里举几个比较隐蔽的例子。 1、结构体成员指针未初始化 structstudent { char*name; intscore; }stu,*pstu; intmain() { strcpy(stu.name,"Jimy"); stu.score=99; return0; } 很多初学者犯...

Hsuesh的博客 1938

ftell fread 返回结果0

2.fopen读取模式不对 rb+ wb+模式下无效 反正我是这种情况 只能分开rb 和wb。1.种情况 fread 第二个参数一次读取大于文件大小造成读取失败。CFile 也是同一种原因。3.读取的文件为空 --!

B153522278的专栏 354

C中fread()函数返回值特别说明

环境:Vmware Workstation;CentOS-6.4-x86_64 fread的定义形式: #include size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream); 参数说明: void *ptr:指向缓冲区保存或读取的数据 size_t size:控制记录的大小,要读取的每个数据项的

沫俱宏 2万+

fread函数的返回值

函数原型 //每次读取size个 读取nmemb次 size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream); //每次写入size个 读取nmemb次 size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream); 返回值 RETURN VALUE On success, fread() an

9378

fread读取大文件以及返回值问题

今天fread文件读取遇到问题,本来很小的一个问题,但是一直没有注意到,导致花了不少时间调试,所以写下来备忘一下。 size_t fread ( void * ptr, size_t size, size_t count, FILE * stream ); //Parameters /* ptr Pointer to a block of m

sunshineyy85的专栏 9261

fread函数返回值

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33754065的博客 1万+

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

今天在写一个代码,要把一帧的buffer读入到文件,因为有NEON和OpenCL两种不同的实现所以需要读取文件两次,代码如下: 1 FILE *file; 2 int i = 0; 3 INTER_BLOCK_SIZE_GPU_RS *block_size; 4 file = fopen(name, "rb"); 5 if (fil...

a623277405的博客 1353

fread / fwrite 返回 0问题

fread 的函数原型是(来自MSDN): size_t fread( void *buffer, size_t size,size_t count,FILE *stream); 我们用fread读的时候,有时会把size设置为整数,比如:300。然后我们可能用一个循环来读取文件的内容: while ((iBytesRead = fread (buf, 300, 1, fin))>

panyanyany(飞雨幻沙) 5071

fread返回值整了

刚才编一个关于用C库函数实现的文件复制操作的代码时发生错误。错误的根本是想当然的以为fread函数的用法,对其理解不深刻。后来在网友帮助下才发现错误。 其实函数的用法可以通过Linux中的man来获得帮助。 比如fread.在终端键入 man 3 fread 这是会出现下面的东西: NAME fread, fwrite - binary stream input/ou

Sugar的专栏 2万+

freadfread_s读取文件(二进制文件)

fread()是c库函数,利于移植,使用缓存,效率较read()高。 原型: size_t fread(void *buffer, size_t size, size_t count, FILE * stream); 要注意的是它的返回值,如果读取到了文件尾,返回值小于count,可以使用feof()函数检测出来,返回真。 PS:返回值代表的是某种类型的size的个数。 下面程序按照1024...

weixin_33697898的博客 7522

关于fread是否会阻塞的问题

1fread这个函数是阻塞的吗? 2当我读取某一个文件是否需要等到fread返回才能继续下面的操作? 3还有,如果我读取的文件内部有错误(例如,那一块磁盘有问题,或是其他的一些问题),此时fread还能继续正常读取吗?如果读不到,fread是否会阻塞住,还是能马上返回异常? 1.fread不是阻塞函数,要不就是读到了,要不就是读不到或者异常返回。 2.fread函数打开文件后如果是读写方式,则该该文件直到操作完成后,其他进程才能对其操作。 3.fread有异常直接会返回错误。不会阻塞等待。 ....

weixin_49356927的博客 2770

C中fread()函数的返回值

fread(从文件流读取数据)     表头文件  #include   定义函数  size_t fread(void * ptr,size_t size,size_t count,FILE * stream);   函数说明  fread()用来从文件流中读取数据。参数stream为已打开的文件指针,参数ptr 指向欲存放读取进来的数据空间,读取的字节数以参数size*count来

gaofeidongdong的专栏 2381

关于fread()函数返回值的几个易错点

函数原型:size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream); 头文件:stdio.h 功能:以数据块的方式从文件中读取相应的内容。 参数: ptr:存放读取出来的数据。 size:指定读取文件内容的块数据大小,类型size_t为unsigned int类型。 nmemb:指定读取文件的块...

Grey_Street的博客 5095

Silvaco半导体仿真学习课程

Silvaco半导体仿真学习课程## 课程信息课程名称:Silvaco半导体仿真学习2022格式:MP4|视频编码H.264,分辨率1920×1080|音频编码AAC,采样率44.1kHz,双声道语言:英语时长:2小时23分钟文件大小:768MB---## Silvaco培训### 课程收获- 掌握半导体器件仿真方法- 学会电子器件设计- 能够对二极管、晶体管、太阳能电池及纳米尺度器件等基础电子元件进行仿真- 学习并理解Silvaco软件指令与命令- 全面掌握相关物理与数值计算方法- 精通Silvaco软件代码编写### 学习要求- 需自备电脑- 需具备网络连接用于下载相关资源- 能够自行在电脑上安装Silvaco软件### 课程介绍本课程将通过Silvaco软件,带大家系统学习半导体电子器件的设计与仿真。课程还会讲解Silvaco的指令、命令及代码编写,全程结合屏幕演示与手写板书,分步细致教学。课程还会讲解不同精度与运算速度下的各类仿真方法,介绍迁移率、载流子复合-产生、电流密度等半导体物理量对应的多种仿真模型。完成课程学习后,你将彻底理解电子器件工作原理及各类仿真方法,相关技能可应用于学业研究、论文撰写及日常工作。### 往期学员评价- “课程内容干货满满,对我的研究工作帮助很大,非常感谢。”- “半导体器件工程师的绝佳课程。”- “讲解十分详尽,期待后续推出纳米结构器件与电路仿真相关的进阶内容。”- “对于想入门SILVACO的新手来说,这门课非常棒。”### 适合人群- 希望深入学习半导体物理的人群- 计划基于器件仿真完成毕业论文的学习者- 电子工程师- 半导体芯片制造从业者- 学术科研人

上一篇: IP数据包长度问题
下一篇: 用批处理设置你的ip
akashequ
博客等级 码龄19年 5粉丝 19原创
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值