c语言中怎么把一个结构体数组写入文件

fwrite(&cus[i],sizeof(struct client),1,fp) 是什么意思

C语言把一个结构体数组写入文件分三步:

1、以二进制写方式(wb)打开文件

2、调用写入函数fwrite()将结构体数据写入文件

3、关闭文件指针

相应的,读文件也要与之匹配:

1、以二进制读方式(rb)打开文件

2、调用读文件函数fread()读取文件中的数据到结构体变量

3、关闭文件指针

参考代码如下:

#include<stdio.h>
struct stu {
char name[30];
int age;
double score;
};
int read_file();
int write_file();
int main()
{
if ( write_file() < 0 ) //将结构体数据写入文件
return -1;
read_file(); //读文件,并显示数据
return 0;
}

int write_file()
{
FILE *fp=NULL;
struct stu student={"zhang san", 18, 99.5};
fp=fopen( "stu.dat", "wb" ); //b表示以二进制方式打开文件
if( fp == NULL ) //打开文件失败,返回错误信息
{
printf("open file for write error\n");
return -1;
}
fwrite( &student, sizeof(struct stu), 1, fp ); //向文件中写入数据
fclose(fp);//关闭文件
return 0;
}

int read_file()
{
FILE *fp=NULL;
struct stu student;
fp=fopen( "stu.dat", "rb" );//b表示以二进制方式打开文件
if( fp == NULL ) //打开文件失败,返回错误信息
{
printf("open file for read error\n");
return -1;
}
fread( &student, sizeof(struct stu), 1, fp ); //读文件中数据到结构体
printf("name=\"%s\" age=%d score=%.2lf\n", student.name, student.age, student.score ); //显示结构体中的数据
fclose(fp);//关闭文件
return 0;
}

 fwrite(const void*buffer,size_t size,size_t count,FILE*stream);   

(1)buffer:指向结构体的指针(数据首地址)   
(2)size:一个数据项的大小(一般为结构体大小)
(3)count: 要写入的数据项的个数,即size的个数   
(4)stream:文件指针。

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-10-06
fwrite(const void*buffer,size_t size,size_t count,FILE*stream); (1)buffer:是一个指针,对fwrite来说,是要输出数据的地址。
(2)size:要写入的字节数;
(3)count:要进行写入size字节的数据项的个数;
(4)stream:目标文件指针。
这里fwrite(&cus[i],sizeof(struct client),1,fp)
sizeof用来测量结构体client的长度、、也就是要写入的字节数、、本回答被提问者采纳
第2个回答  2010-07-04
fwrite(&cus[i],sizeof(struct client),1,fp);这一句的作用:
将数组cus的第i+1个结构体写入文件。因为他传入的是指针&cus[i],即第i+1个元素的首位地址,而且写入的长度是该结构体类型的size。
如果你想要把整个结构体数组都写入文件,则应该为:
fwrite(cus,sizeof(cus),1,fp);
或者
fwrite(&cus[0],sizeof(cus),1,fp);

对于像结构体和数组这样的串行数据,在内存中是连续存储的。所以我们在处理的时候,经常只需要确认它的首地址和长度就OK了.对这一点应用熟练了,你会充分感受到指针带来的便捷,在很多问题上也就如鱼得水……

仅供参考!