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