1 函数原型
fwrite():将ptr指向的内存空间中储存的数据块写入与指定流stream相关联的二进制文件中,函数原型如下:
size_t fwrite(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指定了fwrite()函数要写入的文件流,等于fopen()函数的返回值。
3 返回值
fwrite()函数的返回值类型为size_t(unsigned int)型,返回成功写入文件的数据项个数。
C语言标准描述如下:
1. The number of objects written successfully, which may be less than count if an error occurs.
2. If size or count is zero, fwrite returns zero and performs no other action.
4 示例
使用fwrite()函数将数组中的内容写入二进制文件,代码如下所示:
#define SIZE 20
int main()
{
//
int i_arr[SIZE] = { 0 };
int i = 0;
for (i = 0; i < SIZE; i++)
{
i_arr[i] = 2 * i;
}
//打开文件
FILE* fp;
if ((fp = fopen("1.dat", "wb")) == NULL)
{
printf("Failed to open file.\n");
exit(1);
}
//第一次写文件
if ((fwrite(i_arr, sizeof(int), SIZE, fp)) != SIZE)
{
printf("Failed to write file.\n");
exit(1);
}
//第二次写文件
if ((fwrite(i_arr, sizeof(i_arr), 1, fp)) != 1)
{
printf("Failed to write file.\n");
exit(1);
}
//第三次写文件
if ((fwrite(i_arr, sizeof(int), (SIZE+12), fp)) != (SIZE+12))
{
printf("Failed to write file.\n");
exit(1);
}
//关闭文件
fclose(fp);
return 0;
}
代码运行结果如下图所示:
代码及运行结果分析:
- 第一次调用fwrite()函数,数组i_arr中的每个元素是一个数据项;
- 第二次调用fwrite()函数,数组i_arr整体是一个数据项;
- 第三次调用fwrite()函数,写二进制文件的数据项个数大于数组的元素个数,编译器会提示以下错误。
警告 C6385 从“i_arr”中读取的数据无效: 可读大小为“80”个字节,但可能读取了“128”个字节。