【发布时间】:2010-05-11 16:29:55
【问题描述】:
我有一个结构:
typedef struct student
{
char fname[30];
char sname[30];
char tname[30];
Faculty fac;
int course;
char group[10];
int room;
int bad;
} Student;
我从文件中读取它:
Database * dbOpen(char *fname)
{
FILE *fp = fopen(fname, "rb");
List *lst, *temp;
Student *std;
Database *db = malloc(sizeof(*db));
if (!fp)
return NULL;
FileNameS = fname;
std = malloc(sizeof(*std));
if (!fread(std, sizeof(*std), 1, fp)) {
db->head = db->tail = NULL;
return db;
}
lst = malloc(sizeof(*lst));
lst->s = std;
lst->prev = NULL;
db->head = lst;
while (!feof(fp)) {
fread(std, sizeof(*std), 1, fp);
temp = malloc(sizeof(*temp));
temp->s = std;
temp->prev = lst;
lst->next = temp;
lst = temp;
}
lst->next = NULL;
db->tail = lst;
fclose(fp);
return db;
}
我有一个问题......在最后一条记录中,我有一个这样的文件指针: `FP 0x10311448 {_ptr = 0x00344b90“НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН_ _iobuf * P>
` 我把最后一条记录读了 2 遍...
保存文件代码:
void * dbClose(Database *db)
{
FILE *fp = fopen(FileNameS, "w+b");
List *lst, *temp;
lst = db->head;
while(lst != NULL) {
fwrite(lst->s, sizeof(*(lst->s)), 1, fp);
temp = lst;
lst = lst->next;
free(temp);
}
free(db);
fclose(fp);
}
【问题讨论】:
-
这是我喜欢 STL 容器的众多原因之一。很容易忘记调试列表代码是多么有趣。
-
您遇到的问题描述不清楚。你能详细说明一下吗?另外,我相信最后一段代码是重复的。