Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Recorrer una estructura sin conocer sus campos

Estas en el tema de Recorrer una estructura sin conocer sus campos en el foro de C/C++ en Foros del Web. Hola a tod@s me gustaría saber si se puede recorrer una estructura de datos en C sin saber qué campos la componen, crear un bucle ...
  #1 (permalink)  
Antiguo 06/06/2008, 01:41
Avatar de kappra  
Fecha de Ingreso: diciembre-2004
Mensajes: 125
Antigüedad: 19 años, 4 meses
Puntos: 0
Recorrer una estructura sin conocer sus campos

Hola a tod@s

me gustaría saber si se puede recorrer una estructura de datos en C sin saber qué campos la componen, crear un bucle que recorra la estructura y me devuelva nombre de campo y valor.

Gracias de antemano
__________________
oO <--- H. Kappra ---> oO
  #2 (permalink)  
Antiguo 01/08/2008, 00:48
 
Fecha de Ingreso: agosto-2008
Mensajes: 1
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Recorrer una estructura sin conocer sus campos

Cita:
Iniciado por kappra Ver Mensaje
Hola a tod@s

me gustaría saber si se puede recorrer una estructura de datos en C sin saber qué campos la componen, crear un bucle que recorra la estructura y me devuelva nombre de campo y valor.

Gracias de antemano
A mi también me interesaría recorrer una estructura sin conocer sus campos. ¿Alguien se ha encontrado con este problema y lo ha solventado?

Gracias!!
  #3 (permalink)  
Antiguo 01/08/2008, 04:30
Avatar de aloqui  
Fecha de Ingreso: diciembre-2007
Mensajes: 973
Antigüedad: 16 años, 5 meses
Puntos: 24
Respuesta: Recorrer una estructura sin conocer sus campos

En C no se puede.
__________________
Grupos de Música
Pop Music Stars
  #4 (permalink)  
Antiguo 20/01/2009, 14:41
 
Fecha de Ingreso: abril-2008
Mensajes: 18
Antigüedad: 16 años
Puntos: 0
Respuesta: Recorrer una estructura sin conocer sus campos

Hola, yo tengo un problema similar,
trato de leer un archivo sin saber que estructura ocuparon para guardar los datos, una solucion a medias que encontre, es crear una estructuctura con todos los tipos de datos, he ir leyendo dato por dato, solo que tu tienes que indicar cual es el que es valido, entonces el cursor de coloca en el siguiente dato, ek problema que tengo es que no se como leer cadenas de caracteres:
Bueno les dejo el codigo que hice y si alguien lo puede mejorar se los agradecere.
Utiliza las llamadas al sistema de Linux:

************************************************** *******
#include<unistd.h>
#include<stdio.h>
#include<stdlib.h>
#include<fcntl.h>

main(){

union un{
int dai;
float daf;
long long dal;
double dad;
char dac;
}uni;

int i=0;
int fd = open( "archivo" , O_RDONLY , 777);

printf("****************************************** *************\n");
printf( " Tamaño de la Union %d \n " , sizeof(uni) );

while(read(fd , &uni , sizeof(uni)) > 0 ){

printf(" 1.- int\t %d\n" , uni.dai);
printf(" 2.- float\t %f\n" , uni.daf);
printf(" 3.- long long\t %lld \n" , uni.dal);
printf(" 4.- double\t %lf\n" , uni.dad);
printf(" 5.- char\t %s" , uni.dac);

printf("\n\nDato aceptado : ");
scanf("%d" , &i );

switch(i){
case 1:lseek(fd , ( sizeof(int) - sizeof(uni) ) , SEEK_CUR);
break;
case 2:lseek(fd , (sizeof(float) -sizeof(uni)) , SEEK_CUR);
break;
case 3:lseek(fd, (sizeof(long long) - sizeof(uni)) , SEEK_CUR);
break;
case 4:lseek(fd, (sizeof(double)-sizeof(uni)),SEEK_CUR);
break;
case 5:lseek(fd, (sizeof(uni.dac)-sizeof(uni)) ,SEEK_CUR);
break;
}
}
}
************************************************** *******

Espero que les sirva y tambien me puedan ayudar
(solo cambia el nombre del archivo por "archivo")
  #5 (permalink)  
Antiguo 23/01/2009, 22:14
Avatar de cesmichael  
Fecha de Ingreso: julio-2008
Mensajes: 207
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Recorrer una estructura sin conocer sus campos

Mu ingeniosa tu respuesta sr_x
Pero no se para que quieren hacer esto. Esto me seuna a hacking ¬¬
Bueno yo no se hacerlo en C. Pero en Java a traves del flujo de objetos tu puedes recuperar y guardar archivos como si nada. simplemente se trabaja como si fuera un tipo object. Creo que era algo asi
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:05.