J'ai un struct:Lire et écrire struct en C
typedef struct student
{
char fname[30];
char sname[30];
char tname[30];
Faculty fac;
int course;
char group[10];
int room;
int bad;
} Student;
Je l'ai lu à partir du fichier:
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;
}
et moi avons un problème ... Au dernier enregistrement j'ai un tel pointeur de fichier: `fp 0x10311448 {_ptr = 0x00344b90 « ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН НННННННННННННННННННННННННННННННННННННННННННН _ _iobuf *
` Et j'ai lu 2 fois le dernier enregistrement ...
Enregistrer le code du fichier:
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);
}
Et ceci est l'une des nombreuses raisons pour lesquelles je suis venu à aimer les conteneurs STL. Il est facile d'oublier à quel point le code de la liste de débogage peut être amusant. –
La description du problème que vous rencontrez n'est pas claire. Pourriez-vous élaborer? Aussi, je crois que le dernier morceau de code est dupliqué. –