Hola a todo el EH, me gustaría saber si podrian ayudarme, mi problema es este:
tengo una estructura:
typedef struct _RE_MORE {
BYTE r1;
BYTE r2;
BYTE r3;
BYTE r4;
WORD r5;
WORD r6;
DWORD RX1;
DWORD RX2;
} RE_MORE, *LPRE_MORE;
typedef struct _Game02 {
WORD re1;
WORD re2;
WORD re3;
RE_MORE remore[1];
} Game02 , *PGame02 ;
ahora declaro tengo un puntero de tipo Game02
y quiero acceder al miembro r1:
PGame02 puntero
Variable = puntero->remore[0].r1;
pero en variable no me almacena el valor que esta en r1.
por favor podrian decirme como puedo resolver este problema y cual es la mejor forma de hacerlo? Gracias
¿Has puesto a apuntar el puntero hacia la estructura? te dejo un code que funciona:
#include <stdio.h>
#include <windows.h>
typedef struct _RE_MORE {
BYTE r1;
BYTE r2;
BYTE r3;
BYTE r4;
WORD r5;
WORD r6;
DWORD RX1;
DWORD RX2;
}RE_MORE,*LPRE_MORE;
typedef struct _Game02 {
WORD re1;
WORD re2;
WORD re3;
RE_MORE remore[1];
} Game02 , *PGame02 ;
int main(int argc, char *argv[])
{
Game02 game;
PGame02 gameP = &game;
int variable = gameP->remore[0].r1;
printf("Variable %d",variable);
return 0;
}
Hola gracias por responder, pero a mi no me funciona :huh:
veras hice este codigo:
#include <stdio.h>
#include <windows.h>
typedef struct _RE_MORE {
BYTE r1; // 7
BYTE r2; // 8
BYTE r3; // 9
BYTE r4; // 10
WORD r5; // 11,12
WORD r6;
DWORD RX1;
DWORD RX2;
}RE_MORE,*LPRE_MORE;
typedef struct _Game02 {
WORD re1; // 1,2
WORD re2; // 3,4
WORD re3; // 5,6
RE_MORE remore[1];
} Game02 , *PGame02 ;
BYTE pruebaarray[50] = {1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30};
int main(int argc, char *argv[])
{
PGame02 gameP = (PGame02)pruebaarray;
int variable = gameP->remore[0].r1;
printf("Variable %d",variable);
return 0;
}
hice ese array para ver si de verdad obtenia el valor correcto y no me funciono
El problema es el alineamiento de la estructura, todo depende del compilador que utilices, y de los parametros que son pasados al compilador, generalmente los miembros de una estructura se alinean al tamaño de un DWORD, debido a que la accesos a posiciones de memoria por la CPU son más rapido si estan alineados , por eso mismo debes verificarlo, que compilador estas usando?
en VC++ se podes hechar una miraba a /zp
o usar
#pragma pack(push)
#pragma pack(alineamiento)
// Tu estructura
#pragma pack(pop)
Gracias a todos eso era! ;-)
Aunque aun no entiendo bien