比如:
struct stu {
int id
char name[N]
}
你的文件a.dat:
10 //学生总数,读一个后面来循环
1 //fscanf(fp, "%d", &stu[i].id)
小明 //fscanf(fp, "%s", &stu[i].name)
2
小王
..如此往复读取。
------------
如果是二进制文件,可以用fread读定长数据,直接存到结构体中
int fread( void *buffer, size_t size, size_t num, FILE *stream )
//buffer结构体指针,
//size结构体长度
//num一般指定为1
//stream文件流
C语言中对结构体数据格式文件进行读取时,必须以二进制格式打开文件,然后按结构体类型变量内存块方式进行数据读取,相关读数据命令为fread()。
函数说明:
#include <stdio.h>
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream)
从stream文件流中,读取nmemb个size大小的数据块到ptr所指的内存buf中,返回读取到的有效数据块数。
如,有如下结构体定义:
typedef struct TEST
{
int num
double score
}STRTEST
STRTEST data
FILE *fp = fopen("file.dat", "rb" ) //按二进制格式打开文件
int n=fread( &data, sizeof(STRTEST), 1, fp ) //读取一个数据块到变量data中。
注意,当结构体中定义的变量有指针类型时,在存储数据时,就不能按结构体进行存储了。
因为,指针变量中存储的是内存地址,而程序在不同环境运行时,所使用的内存地址是不同的,只存储内存地址,不能把真正的数据保存下来,所以,即使是正确读取到文件内容,也不能得到当时的结构体内存数据。因而,在存储结构体数据时,要根据结构体类型变量特点采用正确的方法进行存储,才能正确的读取。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)