fread使用中遇到的问题

· 函数名 : 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这个值设置得过大。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值