No puedo acceder a mi conjunto de estructuras

He declarado una matriz de estructuras como tal:

typedef struct{
int source;
int dest;
int type;
int port;
char data;
}test;

test packet[50];

y estoy tratando de acceder a la matriz e imprimirla en la pantalla como tal:

for (p = 0; p < i; p++)
{
    printf("%i", packet[p]);
}

Pero no estoy obteniendo lo que esperaba. Soy muy nuevo en C, así que lo siento por cualquier problema con esta publicación. Sólo pide más información y te la daré. ¿Tengo la lógica completamente equivocada con esto?

En mi cabeza, he creado 50 instancias de la estructura en una matriz con cada elemento de la matriz que contiene las 5 variables en la estructura.

preguntado el 03 de mayo de 12 a las 21:05

2 Respuestas

Han pasado años desde que hice C, pero no creo que funcione de esa manera. Es posible que desee imprimir las variables miembro de la estructura una por una.

for (p = 0; p < i; p++)
{
  printf("%i\n", packet[p].source);
  printf("%i\n", packet[p].dest);
  printf("%i\n", packet[p].type);
  printf("%i\n", packet[p].port);
}

O mejor aún, haz un método, llámalo algo como printTest() y haz que haga lo anterior.

En su ejemplo anterior, está tratando de imprimir todo el objeto, lo que no funcionaría.

contestado el 03 de mayo de 12 a las 21:05

Cuando intento imprimir las variables de miembros, aparece un "error: solicitud de 'fuente' de miembros en algo que no es una estructura o unión" - user1373475

¿Creaste una instancia de la clase? - PaulG

@octopusgrabbus - Tienes razón, mi error. He hecho el cambio necesario a mi respuesta. - PaulG

Dado que los

typedef struct{
int source;
int dest;
int type;
int port;
char data;
}test;

test packet[50];

debe hacer referencia explícita a todos y cada uno de los campos a los que desea acceder. En el caso de su ejemplo, desea imprimir cada campo de la estructura, por lo que deberá referirse específicamente a cada campo, así: printf("%i\n", packet[0].source);

Su ejemplo específico estaba en un bucle for con p como índice de matriz, por lo que el código real sería printf("%i\n", packet[p].source);

Finalmente, puede analizar fácilmente algunas construcciones de C en C++, pero no las construcciones de C++, como las clases, en C.

contestado el 03 de mayo de 12 a las 21:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.