Guardar en archivo estructura c/memoria reservada con malloc
Publicado por Cristian (1 intervención) el 06/09/2012 22:05:51
Lo que estoy tratando de hacer en general es un archivo compuesto de una estructura cuyos registros son de largo variable, para ello, le hago un malloc() mediante puntero, a la estructura temporal del programa que se ve ahí abajo, e ingreso los datos. El problema surge cuando yo trato de guardar los datos a archivo, ya que no sé si efectivamente se guardaron, lo anterior se responde al querer intentar revisar el contenido mediante un programa alternativo.
Este es el programa para guardar los datos
Y este es el programa para querer revisar los datos
Sé que al hacer el malloc mediante puntero a la estructura y guardar los datos correspondientes no tengo problema, pero lo que no puedo hacer todavía (y me está calentando la cabeza) es que se guarden bien a archivo y asegurarme de que los datos que yo ingresé efectivamente estan ahí.
No sé que estoy haciendo mal al guardar el archivo, y tampoco sé que estoy haciendo mal al abrir el archivo.
De antemano se agradece la ayuda.
Saludos.
Este es el programa para guardar los datos
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct stCrimeArchive {
char id_student[10];
int id_document;
char judgement[30];
int id_crime;
char date[12];
char id_police[12];
};
int main()
{
struct stCrimeArchive *regi;
FILE *filea;
filea = fopen("crimearchives.dat", "r+b");
if(!filea)
filea = fopen("crimearchives.dat", "w+b");
int i;
char num[6];
regi = (struct stCrimeArchive*)malloc (sizeof(struct stCrimeArchive));
printf("ID DOCUMENT: ");
fgets(num, 6, stdin);
regi->id_document= atoi(num);
printf("ID STUDENT: ");
fgets(regi->id_student, 30, stdin);
for(i = strlen(regi->id_student)-1; i && regi->id_student[i] < ' '; i--)
regi->id_student[i] = 0;
printf("CRIME CODE: ");
fgets(num, 6, stdin);
regi->id_crime = atoi(num);
printf("DATE OF THE CRIME: ");
fgets(regi->date, 30, stdin);
for(i = strlen(regi->date)-1; i && regi->date[i] < ' '; i--)
regi->date[i] = 0;
printf("ID POLICE: ");
fgets(regi->id_police, 30, stdin);
for(i = strlen(regi->id_police)-1; i && regi->id_police[i] < ' '; i--)
regi->id_police[i] = 0;
printf("JUDGEMENT: ");
fgets(regi->judgement, 30, stdin);
for(i = strlen(regi->judgement)-1; i && regi->judgement[i] < ' '; i--)
regi->judgement[i] = 0;
fseek(filea, 0, SEEK_END);
fwrite(®i, sizeof(*regi), 1, filea);
free(regi);
fclose(filea);
}
Y este es el programa para querer revisar los datos
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct stCrimeArchive {
char id_student[10];
int id_document;
char judgement[30];
int id_crime;
char date[12];
char id_police[12];
};
int main()
{
struct stCrimeArchive *regi;
// regi = (struct stCrimeArchive*)malloc (sizeof(struct stCrimeArchive));
FILE *filea;
filea = fopen("crimearchives.dat", "r+b");
if(!filea)
filea = fopen("crimearchives.dat", "w+b");
rewind(filea);
while (fread(®i, sizeof(struct stCrimeArchive), 1, filea))
printf("%2d %-11s %-11s %8d %-13s %-14s\n", regi->id_document, regi->id_police, regi->date, regi->id_crime, regi->id_student, regi->judgement);
fclose(filea);
}
Sé que al hacer el malloc mediante puntero a la estructura y guardar los datos correspondientes no tengo problema, pero lo que no puedo hacer todavía (y me está calentando la cabeza) es que se guarden bien a archivo y asegurarme de que los datos que yo ingresé efectivamente estan ahí.
No sé que estoy haciendo mal al guardar el archivo, y tampoco sé que estoy haciendo mal al abrir el archivo.
De antemano se agradece la ayuda.
Saludos.
Valora esta pregunta


0