Bonjour et bon debut de semaine.
j'ai un groupe de structure tres differentes les unes des autres que je veux parcourire. ex:donc la il y a 3 pointeurs vers des structures. par exemble myPeers est remplit comme suitCode:
1
2
3
4
5 fd=connection("127.0.0.1",9090); channel = action_getChannel(fd,my_id,"192.168.28.77"); mid_list= action_getMid(fd,my_id); myPeers = action_getPeers(fd,my_id,60,1); action_close(fd,my_id);
maintenant ce que je veux faire c'est de parcourire avec un pointeur void et je suis un peu coincer. pour le moment ce que je fait c'est de creer une variable pour chaque type afin de sauvegarder l'adresse du pointeur comme ce si:Code:
1
2
3
4
5
6
7
8
9
10
11
12
13 action_getPeers() { int i; ALLOC(Peer *,p,(N+1)); //qui est une macro pour malloc + test //Peer **p = (Peer **) malloc(sizeof(Peer *) * (N+1)); if(p==NULL){fprintf(stderr,"alloc error : %s:%d\n",__FUNC__,__LINE__);exit(EXIT_FAILURE);} p[n]=NULL; for(i=n;i<N;++i) ALLOC(Peer,p[i],1); p->tuc=... p->machin=... .... return p; }
Mais je me dit que 5 structures ca me donnes 10 variables c'est trop; j'aimerai donc avec mes 5 pointeurs retourner et utiliser un seul pointeur void pour utiliser dans les different while,bien sur les structures sont tres differentes . prenons un cas concret avec mid_list qui n'est rien d'autreCode:
1
2
3
4
5
6
7
8
9 Peer **myPeer,**pPeer; myPeers = action_getPeers(fd,my_id,60,1); pPeer=myPeers; while(*pPeer!=NULL) { //do something; ... ++pPeer; }
qu'un tableau de pointeurs sur des chaines de caracteres
quelque chose me dit qu' il doit y avoir une erreur et qu'un bug va me frapper tot ou tard?Code:
1
2
3
4
5
6
7
8
9
10
11
12
13 char **mid_list= action_getMid(fd,my_id); void *k; k=mid_list; while(*(char **)k != NULL) { fprintf(stdout,"\nMidserver : %s\n",*(char **)k); k+=sizeof(char **); } k=channel; while(*(ChannelA **)k != NULL) //... ...
En un mot j'ai pas trouver d'info sur le net et ceci est le fruit de ce que je crois avoir compris avec les pointeurs void * donc je doute.
il y a t-il une facon plus correct de faire la chose?Merci