C中fread()函数返回值特别说明
来源:互联网 发布:mac专柜价格口红 编辑:程序博客网 时间:2024/06/14 17:49
环境:Vmware Workstation;CentOS-6.4-x86_64
fread的定义形式:
#include <stdio.h>
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
参数说明:
void *ptr:指向缓冲区保存或读取的数据
size_t size:控制记录的大小,要读取的每个数据项的字节数
size_t nmemb:记录的数量,要读的数据项的个数
FILE *stream:文件的指针
返回值:
返回读取或回写的记录数,数据项的个数
fread是一个函数。从一个文件流中读数据,最多读取count个元素,每个元素size字节,如果调用成功返回实际读取到的元素个数,如果不成功或读到文件末尾返回 0。
图解说明:
文件a.txt,大小为119个字节:
12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789情况1:
文件大小:119字节
size_t rc = fread(buf, 200, 2, p);
说明:
119 / (200 * 2) = 0 ............. 119,此时商为0,进入下一步
119 / 200 = 0 ..................... 119,此时商为0,0作为返回值返回,119个字节舍弃
返回值:
0
情况2:
文件大小:119字节size_t rc = fread(buf, 10, 50, p);
说明:
119 / (10 * 50) = 0 ................... 119,此时商为0,进行下一步
119 / 10 = 11 ........................... 9,此时商为11,作为返回值,另外,返回值最后再补充一个0,9个字节舍弃
返回值:
11
0
情况3:
size_t rc = fread(buf, 11, 5, p);
说明:
119 / (11 * 5) = 2 ..................... 9,此时商为2,返回两个5,进行下一步
9 / 11 = 0 ................................. 9,此时商为0,返回值为0,9个字节舍弃
返回值:
5
5
0
情况4:
size_t rc = fread(buf, 10, 2, p);
说明:
119 / (10 * 2) = 5 ..................................... 19,此时商为5,返回5个2,进行下一步
19 / 10 = 1 ............................................... 9,此时商为1,返回值为1,另外增加一个0为返回值,9个字节舍弃
返回值:
2
2
2
2
2
1
0
所使用的makefile文件:
.SUFFIXES:.c .oCC=gccSRCS=main.cOBJS=$(SRCS:.c=.o)EXEC=mainstart: $(OBJS)$(CC) -o $(EXEC) $(OBJS)@echo "-----------------------------OK-----------------------".c.o:$(CC) -Wall -o $@ -c $<clean:rm -rf $(EXEC) $(OBJS)
情况1:
#include <stdio.h>#include <errno.h>#include <string.h>int main(int argc, char *args[]){// 创建文件指针,以只读的方式打开文件FILE *p = fopen("a.txt", "r");// 判断打开文件是否成功if (p == NULL){printf("Message : %s\n", strerror(errno));return -1;}// 定义读取文件的缓冲区char buf[1024];// 循环读取文件while (1){// 定义函数返回值size_t rc = fread(buf, 200, 2, p);// 64位操作系统中size_t数据类型是长整形printf("rc = %ld\n", rc);// 读取到文件的结束,退出循环if (rc <= 0)break;}// 关闭文件fclose(p);return 0;}
返回值:
[negivup@negivup mycode]$ ./mainrc = 0
情况2:
#include <stdio.h>#include <errno.h>#include <string.h>int main(int argc, char *args[]){// 创建文件指针,以只读的方式打开文件FILE *p = fopen("a.txt", "r");// 判断打开文件是否成功if (p == NULL){printf("Message : %s\n", strerror(errno));return -1;}// 定义读取文件的缓冲区char buf[1024];// 循环读取文件while (1){// 定义函数返回值size_t rc = fread(buf, 10, 50, p);// 64位操作系统中size_t数据类型是长整形printf("rc = %ld\n", rc);// 读取到文件的结束,退出循环if (rc <= 0)break;}// 关闭文件fclose(p);return 0;}
返回值:
[negivup@negivup mycode]$ ./mainrc = 11rc = 0
情况3:
#include <stdio.h>#include <errno.h>#include <string.h>int main(int argc, char *args[]){// 创建文件指针,以只读的方式打开文件FILE *p = fopen("a.txt", "r");// 判断打开文件是否成功if (p == NULL){printf("Message : %s\n", strerror(errno));return -1;}// 定义读取文件的缓冲区char buf[1024];// 循环读取文件while (1){// 定义函数返回值size_t rc = fread(buf, 11, 5, p);// 64位操作系统中size_t数据类型是长整形printf("rc = %ld\n", rc);// 读取到文件的结束,退出循环if (rc <= 0)break;}// 关闭文件fclose(p);return 0;}
返回值:
[negivup@negivup mycode]$ ./mainrc = 5rc = 5rc = 0
情况4:
#include <stdio.h>#include <errno.h>#include <string.h>int main(int argc, char *args[]){// 创建文件指针,以只读的方式打开文件FILE *p = fopen("a.txt", "r");// 判断打开文件是否成功if (p == NULL){printf("Message : %s\n", strerror(errno));return -1;}// 定义读取文件的缓冲区char buf[1024];// 循环读取文件while (1){// 定义函数返回值size_t rc = fread(buf, 10, 2, p);// 64位操作系统中size_t数据类型是长整形printf("rc = %ld\n", rc);// 读取到文件的结束,退出循环if (rc <= 0)break;}// 关闭文件fclose(p);return 0;}
返回值:
[negivup@negivup mycode]$ mainrc = 2rc = 2rc = 2rc = 2rc = 2rc = 1rc = 0一定要注意理解fread函数的返回值,防止出错。
PS:根据传智播客视频学习整理得出。
- C中fread()函数返回值特别说明
- C中fread()函数的返回值
- [重要]C中fread()函数的返回值
- fread函数的返回值
- fread函数的返回值
- 【VS开发】recv函数函数返回值说明(特别有利于工程调试)
- fwrite()函数和fread()函数分别有几个返回值?分别代表什么意思?(C语言)
- C中fread()函数的建议使用方法
- C语言函数说明与返回值
- C语言 fread()与fwrite()函数说明与示例
- C语言 fread()与fwrite()函数说明与示例
- C语言 fread()与fwrite()函数说明与示例
- C语言 fread()与fwrite()函数说明与示例
- C语言 fread()与fwrite()函数说明与示例
- C语言 fread()与fwrite()函数说明与示例
- C语言 fread()与fwrite()函数说明与示例
- C语言 fread()与fwrite()函数说明与示例
- C语言 fread()与fwrite()函数说明与示例
- Html程序结构
- Eclipse智能提示及快捷键
- C#笔记
- 产品上线的那天晚上
- 贝塞尔曲线练习之弹性的圆
- C中fread()函数返回值特别说明
- 第92讲:Akka第一个案例动手实战开发环境的搭建
- ServletContext.getRealPath() 的输入参数要以"/"开头
- gradle--第十二章 使用Gradle图形用户界面接口
- Eclipse “cannot be resolved to a type” error
- Failed to read key from keystore解决方案
- mac Can't connect to MySQL server on '127.0.0.1' (61)
- Android自定义控件
- HDU 1541 Stars (树状数组)