1 函数原型
fread():从与指定流stream相关联的二进制文件中读取数据块储存在str指向的内存空间中,函数原型如下:
size_t fread(const void *ptr, size_t size, size_t count, FILE *stream)
2 参数
fwrite()函数有四个参数:
- 参数ptr是指向某内存空间的指针,该内存空间用于储存从文件中读取的数据块;参数ptr类型为void*型,说明ptr可以指向任何数据类型;
- 参数size指定了每个从文件读取的数据项的字节大小,类型为size_t(unsigned int)型;
- 参数count指定了从文件读取的数据项的个数,类型为size_t(unsigned int)型;
- 参数stream是一个指向FILE类型结构的指针;参数stream指定了fread()函数要读取的文件流,等于fopen()函数的返回值。
3 返回值
fread()函数的返回值类型为size_t(unsigned int)型,返回从文件成功读取的数据项个数。
C语言标准描述如下:
1. Number of objects read successfully, which may be less than count if an error or end-of-file condition occurs.
2. If size or count is zero, fread returns zero and performs no other action.
3. fread does not distinguish between end-of-file and error, and callers must use feof and ferror to determine which occurred.
4 示例
4.1 示例1
先使用fwrite()函数先写文件,后使用fread()函数读文件并打印,代码如下所示:
#define SIZE 20
int main()
{
//
int arr1[SIZE] = { 0 };
int arr2[SIZE] = { 0 };
int count;
for (count = 0; count < SIZE; count++)
{
arr1[count] = 2 * count;
}
//
FILE* fp;
if ((fp = fopen("1.dat", "wb")) == NULL)
{
printf("Failed to open file.\n");
exit(1);
}
if ((fwrite(arr1, sizeof(arr1), 1, fp)) != 1)
{
printf("Failed to write file.\n");
exit(1);
}
fclose(fp);
//
if ((fp = fopen("1.dat", "rb")) == NULL)
{
printf("Failed to open file.\n");
exit(1);
}
if ((fread(arr2, sizeof(arr2), 1, fp)) != 1)
{
printf("Failed to read file.\n");
exit(1);
}
fclose(fp);
//
for (count = 0; count < SIZE; count++)
{
printf("%d\t%d\n", arr1[count], arr2[count]);
}
return 0;
}
代码运行结果如下图所示:
4.1 示例2
使用fread()函数读文件,文件包含的项数小于需要读取的项数,示例代码如下:
#define SIZE 30
int main()
{
//
FILE* fp;
int arr[SIZE] = { 0 };
int itemsread = 0;
//
if ((fp = fopen("2.dat", "rb")) == NULL)
{
printf("Failed to open file.\n");
exit(1);
}
//
itemsread = fread(arr, sizeof(int), SIZE, fp);
//
printf("bytesread = %d\n", itemsread);
//
fclose(fp);
//
int i = 0;
for (i = 0; i < SIZE; i++)
{
printf("%d\n", arr[i]);
}
return 0;
}
文件包含内容如下图所示:
代码运行结果如下图所示:
代码及运行结果分析如下:
- 文件只包含20个int类型数据;
- fread()函数需要读取30个int类型数据,itemsread=20表示实际只读取20个int类型数据。