Código:
void Ap (RegAgenda Arr[], int &cont)
{ Agenda4=fopen("C:\\Asegurados.dat","a+b");
fseek (Asegurados,0,SEEK_SET);//Busca el inicio del archivo
cont=0;
IniArre(Arr,tam);
Ini_R(Reg);
AnsiString g;
while (!(feof(Asegurados)) && (cont<=tam))
{ fread(&Reg,sizeof(Reg),1,Asegurados);
g=Form7->Edit1->Text.c_str(); //No es necesario esto ultimo
if(strcmp(Reg.ApeNom,"")!=g)//Comparando un AnsiString con un
//número?
{ cont++;
Arr[cont]=Reg;
}
}
cont--;
}
Esa estructura llamada Reg debería ser inicializada antes de escribir en ella con el fread, xq si esta fallase...como sabrías si escribió o no? al menos q lo iguales a un entero y ahí tendrás la cantidad de caracteres leídos,
Supón q nada se leyó....entonces Reg.ApeNom es nula, como está en una estructura y es un arreglo (no declarado como puntero...me imagino) entonces para saber si realmente hay algo allí sería
Código:
if(Reg.ApeNom[0]!=0) // o NULL o '\0'...igual
luego...si no es nula, puedes comparar con el AnsiString g así:
Código:
if(AnsiString(Reg.ApeNom)!=g)
ya q el operador == y el != están sobrecargados para el AnsiString
Supongo q RegAgenda es una clase con el operador = sobrecargado para soportar estructuras como Reg, sino fuese así.....pues habría q copiar el contenido...y suponiendo q te fuera válido esa asignación yo lo haría así:
Código:
memcpy(&Arr[cont],&Reg,sizeof(Reg));
No he ojeado el resto del código, empieza por arreglar esta parte....otra cosa..con el Debugger puedes saber en q línea ocurrela excepción.