博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
fread使用中遇到的问题
阅读量:4028 次
发布时间:2019-05-24

本文共 1650 字,大约阅读时间需要 5 分钟。

· 函数名 : fread

 

: 从一个流中读数据

: int fread(void *ptr, int size, int nitems, FILE *stream);

表示从一个文件中读取nitems个元素,每个元素类型的大小为size

size_t fread (void * Buffer, size_t Size, size_t Count, FILE * Stream);

Size:每个要读取的元素的大小,单位字节----第二个参数
Count:要读取的元素个数------------------第三个参数
函数的返回值是实际读出元素的个数。
fwrite的第二和第三个参数及返回值的含义同上。
用fread(temp,1024,1,fp)也能读出,意思是一个元素的大小是1024个字节,每次读取一个,这在读取前面内容时没问题,当读到最后,加入只剩下100个字节的数据,不足1024字节时,程序返回0,你无法知道程序最后一次读出了多少数据。如果用fread(temp,1,1024,fp),则程序每次返回读出数据的字节数,即使读最后100个字节时,也返回100,这样你可以利用返回值知道程序读出了多少数据。因此用的时候建议选fread(temp,1,1024,fp),下面程序实例只是为了表示,应该注意字符串的结束标识'/0'

程序例 :

 

#include <string.h>

#include <stdio.h>

 

int main(void)

{

FILE *stream;

char msg[] = "this is a test";

char buf[20];

 

if ((stream = fopen("DUMMY.FIL", "w+"))

== NULL)

{

fprintf(stderr,

"Cannot open output file./n");

return 1;

}

 

/* write some data to the file

    Strlen ()函数得到的是不包括‘ /0 的字符串的长度;

如果我们向文件中写入时,写入了 char msg[] = "this is a test";

       那么‘ /0 也被写入了文件。即在下面 read 时,只要我们愿意

       /0 是可以被读出来的

*/

fwrite(msg, strlen(msg)+1, 1, stream);

 

/* seek to the beginning of the file */

fseek(stream, SEEK_SET, 0);

 

/* read the data and display it */

fread(buf, strlen(msg)+1, 1, stream);

printf("%s/n", buf);

 

fclose(stream);

return 0;

}

 

 [转另一篇文章]

C标准库提供的文件函数fread和fwrite的原型为:

size_t fread( 
   
void
 
*
buffer,
   size_t size,
   size_t count,
   FILE 
*
stream 
);
size_t fwrite(
   
const
 
void
 
*
buffer,
   size_t size,
   size_t count,
   FILE 
*
stream 
);

    第一次用的时候觉得接口不够简洁:size*count来表示一共有多少字节就行了,不必分开成两个参数。

   由于头脑中有这种先入为主的思想,所以每次使用这两个函数的时候,size和count的顺序都是随意的,反正乘起来是那么多个字节就行。
    其实不是这样的!这两个函数的size的大小是有限制的,fread中,如果size过大,读出数据会失败;fwrite中,size过大,会导致返回的写入字节数不正确,但是数据还是写成功了。size的最大限制是多少目前还没有测试,所以大家使用的时候注意不要把size这个值设置得过大。

转载地址:http://nztbi.baihongyu.com/

你可能感兴趣的文章
Hashtable和HashMap的区别
查看>>
深入MySQL数据库的索引
查看>>
wml表单提交
查看>>
Log4J的配置详解
查看>>
JSP中EL表达式无效问题
查看>>
java中关于时间日期操作的常用函数
查看>>
Serializable java序列化
查看>>
用Eclipse MyEclipse WebLogic8.1开发第一个Web程序
查看>>
HTTP深入浅出
查看>>
http协议技术资料
查看>>
MyEclipse安装aptana插件的问题
查看>>
Android环境搭建_转载
查看>>
JS操作SELECT表单大全,赋默认值,取值,增,删等
查看>>
浅谈BigDecimal类在电子商务中至关重要的地位!
查看>>
输出的数字的格式DecimalFormat的方法用途
查看>>
如何使用spring的作用域:
查看>>
Tomcat DBCP 连接池参数说明
查看>>
hibernate集合映射inverse和cascade详解
查看>>
使用SSH框架的好处
查看>>
attachEvent、addEventListener、detachEvent、removeEventListener
查看>>