C语言学习记录
程序员文章站
2022-07-15 09:05:23
...
fwrite
作用
向文件中写入数据块
参数
- 数据来源的内存地址,可以用指针或者&
- 要写入的每个数据项的字节数,一般可以用sizeof得到
- 要写入的项数(count)
- 目标文件的文件指针
返回值
返回实际写入的项数,可以据此使用for循环进行少量多次的写入,并判断循环的结束
内容基本来自百度百科,稍作整理
代码说明
#include <stdio.h>
#include <stdlib.h>
typedef struct//定义了一个结构体
{
char name[20];
int age;
char email[50];
}person;
void getInfo(person *pInfo)//填充结构体的函数
{
printf("请输入姓名\n");
gets_s(pInfo->name, 19);
printf("请输入年龄\n");
scanf_s("%d", &pInfo->age);
getchar();
printf("请输入邮箱\n");
gets_s(pInfo->email,49);
}
void putInfo(person *pInfo)//解析结构体的函数
{
printf("%s\n", pInfo->name);
printf("%d\n", pInfo->age);
printf("%s\n", pInfo->email);
}
int main()
{
//利用fwrite写入结构体
person people[2]={NULL};//将两个结构体初始化后乱码消失
char fileA[50];
FILE *pfOut = NULL;
errno_t errIn;
puts("请输入文件要保存的位置");
gets_s(fileA, 49);
errIn = fopen_s(&pfOut, fileA, "wt");//vs提供了fopen_s函数代替fopen
if (errIn!=0)
{
puts("文件打开/创建失败,请检查后重试");
exit(0);
}
getInfo(&people[0]);
getInfo(&people[1]);
int count = fwrite(&people, sizeof people[0], 2, pfOut);//利用sizeof获取数据块的字节数
printf("%dmmm", sizeof people[0]);//输出后可以给后边的fread使用
if (count==2)//一步检查,其实好像没必要,应该搞成出错后提醒
{
puts("success");
}
fclose(pfOut);
//利用fread对上边写的文件进行读取
//与上边的变量可能冲突,故只能同时运行一个
/*FILE *pfIn = NULL;
errno_t err;
person people[10];
err = fopen_s(&pfIn, "C:\\Users\\dang\\Desktop\\b.txt", "rt");//vs提供了fopen_s函数代替fopen
//C:\Users\dang\Desktop\b.txt为运行时采用的地址
if (err!=0)
{
puts("文件读取失败,请检查后重试");
exit(0);
}
unsigned int count;
for (int i=0;i<10;i++)
{
count = fread(&people[i], 76,1, pfIn);
if (count!=1)//对数据块逐个读取
{
if (count==0)//读取完成后跳出循环
{
puts("文件读取完成");
break;
}
puts("内容读取失败,请检查后重试");
}
putInfo(&people[i]);
}*/
getchar();
}
下一篇: C语言学习记录