C语言#fwrite

fwrite

作用

向文件中写入数据块

参数
  1. 数据来源的内存地址,可以用指针或者&
  2. 要写入的每个数据项的字节数,一般可以用sizeof得到
  3. 要写入的项数(count)
  4. 目标文件的文件指针
返回值

返回实际写入的项数,可以据此使用for循环进行少量多次的写入,并判断循环的结束

内容基本来自百度百科,稍作整理
代码说明
#include 
#include 

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语言学习,C语言,库函数,fwrite)