fread/fwrite第二个参数和第三个参数的区别以及与返回值的关系
来源:互联网 发布:vmware虚拟机网络不通 编辑:程序博客网 时间:2024/06/06 05:32
两者是块读写的方式,第二个参数是单个块的大小,第三个参数是块的个数,返回值是实际读写的块的个数,而不是字节数。
如果将第三个参数设为1,那么如果fread读到的字节数小于第二个参数,则fread返回值为0。
这个问题很容易搞错,并导致很多问题,需要强调的是fread函数返回的并不是字节数。
realRead = fread(buf,item,count,fp) (每次读item大小的数据块,分count次来读。)
而是返回的是成功有效的读取的item元素的个数,而成功读入的字节数则是realRead * sizeof(item)
一般说来realRead 是小于count的,很巧的情况就刚好为count.除非文件大小刚好为item大小的整数倍。
返回的是真实读入item元素的个数,虽然读了count次,但是真正读到的有效个数为realRead个
真实读入字节数就为realRead*sizeof(item)
fread(从文件流读取数据)
表头文件 #include<stdio.h>
定义函数 size_t fread(void * ptr,size_t size,size_t count,FILE * stream);
函数说明 fread()用来从文件流中读取数据。参数stream为已打开的文件指针,参数ptr 指向欲存放读取进来的数据空间,读取的字节数以参数size*count来决定。
Fread()会返回实际读取到的count数目,如果此值比参数count来得小,则代表可能读到了文件尾了或者有错误发生(前者几率大),这时必须用feof()或ferror()来决定发生什么情况。
返回值 返回实际读取到的count数目。
fread返回的不是字节数,
当且仅当下面这么用的时候,返回值才是字节数(当然因为恰好一个数据块大小为1个字节,相当于realRead*1)
char buff[size];
FILE *fp;
...
realRead = fread(buff, 1, size, fp);
...
如果是: fread(buff, size, 1, fp)
返回1表示读取了size字节,返回0表示读取数量不够size字节
如果将第三个参数设为1,那么如果fread读到的字节数小于第二个参数,则fread返回值为0。
这个问题很容易搞错,并导致很多问题,需要强调的是fread函数返回的并不是字节数。
realRead = fread(buf,item,count,fp) (每次读item大小的数据块,分count次来读。)
而是返回的是成功有效的读取的item元素的个数,而成功读入的字节数则是realRead * sizeof(item)
一般说来realRead 是小于count的,很巧的情况就刚好为count.除非文件大小刚好为item大小的整数倍。
返回的是真实读入item元素的个数,虽然读了count次,但是真正读到的有效个数为realRead个
真实读入字节数就为realRead*sizeof(item)
fread(从文件流读取数据)
表头文件 #include<stdio.h>
定义函数 size_t fread(void * ptr,size_t size,size_t count,FILE * stream);
函数说明 fread()用来从文件流中读取数据。参数stream为已打开的文件指针,参数ptr 指向欲存放读取进来的数据空间,读取的字节数以参数size*count来决定。
Fread()会返回实际读取到的count数目,如果此值比参数count来得小,则代表可能读到了文件尾了或者有错误发生(前者几率大),这时必须用feof()或ferror()来决定发生什么情况。
返回值 返回实际读取到的count数目。
fread返回的不是字节数,
当且仅当下面这么用的时候,返回值才是字节数(当然因为恰好一个数据块大小为1个字节,相当于realRead*1)
char buff[size];
FILE *fp;
...
realRead = fread(buff, 1, size, fp);
...
如果是: fread(buff, size, 1, fp)
返回1表示读取了size字节,返回0表示读取数量不够size字节
参考源代码如下:
int main() { char buf[FILE_RW_BUFFER_SIZE]; int readSize = 0; int writeSize = 0; FILE *traceFd = fopen("./test.tce", "a+"); FILE *pp = popen("ls", "r"); if (NULL == pp) { printf("open pipe for command failed!\n"); return -1; } do { readSize = fread(buf, 2, 512, pp); //48 //readSize = fread(buf, 1, FILE_RW_BUFFER_SIZE, pp); //98 //readSize = fread(buf, FILE_RW_BUFFER_SIZE, 1, pp); //0 printf("readSize is %d!\n", readSize); //writeSize = fwrite(buf, 1, readSize, traceFd); //49 //writeSize = fwrite(buf, 2, readSize, traceFd); //49 file complete writeSize = fwrite(buf, readSize, 2, traceFd); //2 file complete writeSize = fwrite(buf, readSize, 3, traceFd); //2 file complete printf("writeSize is %d!\n", writeSize); } while(FILE_RW_BUFFER_SIZE == readSize); fclose(traceFd); pclose(pp); return 0; }
0 0
- fread/fwrite第二个参数和第三个参数的区别以及与返回值的关系
- fread/fwrite第二个参数和第三个参数的区别以及与返回值的关系
- fread/fwrite第二个参数和第三个参数的区别以及与返回值的关系
- fread的第二个参数和第三个参数可以互换吗---为什么fread容易返回0 ?
- Fread 和fwrite的参数不同,返回值不同
- strncpy与strncat的第三个参数,以及警告C6059
- read/write/fsync与fread/fwrite/fflush的关系和区别
- read/write/fsync与fread/fwrite/fflush的关系和区别
- read/write/fsync与fread/fwrite/fflush的关系和区别
- fread与read的区别---open和fopen的区别--fread函数和fwrite函数
- fseek 和fread、fwrite的区别
- fseek 和fread、fwrite的区别
- fread() fwrite()和write() read()的区别
- fread第二个参数和第三个参数互换注意点——————————函数指针定义注意
- setTimeout的第二个参数
- WebService传多个参数和返回多个参数的方法
- main的第三个参数
- addEventListener的第三个参数
- VC++和C#(WinForm)中WebBrowser(IE内核浏览器)加载第三方BHO解决方案
- linux入门(二)Vim&vi 基本操作
- windows下搭建ffmpeg环境
- Java关键字final、static使用总结
- android自动化测试 getevent/sendevent
- fread/fwrite第二个参数和第三个参数的区别以及与返回值的关系
- Google Map Android v2开发: 安装运行Google Map Android v2 示例程序
- FAT移植建议
- make出错 ./configure: error: SSL modules require the OpenSSL library.
- 构建根文件系统一之ubuntu12.04下安装编译BusyBox图文解说(我的是按照这一篇文章解决错误的)
- display:block、inline和inline-block的区别
- ios后台播放
- 紧急救护受损的Windows系统
- 用淘汰的手机做家庭监控