[C] recuperer une variable de type inconnu?
Fermé
Tisiph0n3
-
17 nov. 2007 à 21:18
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 15 nov. 2011 à 08:06
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 15 nov. 2011 à 08:06
A voir également:
- [C] recuperer une variable de type inconnu?
- Appel inconnu - Guide
- Recuperer message whatsapp supprimé - Guide
- Recuperer video youtube - Guide
- Impossible de récupérer mon compte gmail - Guide
- Comment récupérer un compte facebook piraté - Guide
3 réponses
C'est possible! renseigne toi sur la lib stdarg (man 3 stdarg).
en gros ça permet d'envoyer un nombre indéfini de paramètres de type indéfinis.
en gros ça permet d'envoyer un nombre indéfini de paramètres de type indéfinis.
Hxyp
Messages postés
401
Date d'inscription
vendredi 28 janvier 2011
Statut
Membre
Dernière intervention
27 avril 2014
54
15 nov. 2011 à 05:58
15 nov. 2011 à 05:58
Bonjour,
Pour la question 1 c'est possible en utilisant le type void* enfin ce sera l'adresse qu'on envoi évidemment et derrière on analyserait ce qui se trouve à cette adresse.
printf n'est pas si compliqué puisqu'on sait quel est le formatage qu'on doit appliquer aux variables passées en paramètre..
à l'arrache :
C'est juste pour représenter l'idée, là le tableau de char et le int utilisent putc donc le int va être affiché en ASCII et faudrait voir du côté de little et big endian pour l'affichage des nombres à mon avis
Pour la question 1 c'est possible en utilisant le type void* enfin ce sera l'adresse qu'on envoi évidemment et derrière on analyserait ce qui se trouve à cette adresse.
printf n'est pas si compliqué puisqu'on sait quel est le formatage qu'on doit appliquer aux variables passées en paramètre..
à l'arrache :
#include <stdio.h> #include <stdlib.h> void print(char c,void *v) { size_t loop; char *ptr=(char*)v; if(c=='s'){ do putc(*ptr,stdout); while(*ptr++); } if(c=='d'){ for(loop=0;loop<sizeof(int);loop++) putc(ptr[loop],stdout); } } int main(void) { int n = 2180935; char *s = "hello world"; print('s',s); print('d',&n); return 0; }
C'est juste pour représenter l'idée, là le tableau de char et le int utilisent putc donc le int va être affiché en ASCII et faudrait voir du côté de little et big endian pour l'affichage des nombres à mon avis
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 842
15 nov. 2011 à 08:06
15 nov. 2011 à 08:06
Bonjour,
Effectivement, là tu passes par l'adresse et en plus comme tu le dis tu devras gérer le boustisme de la machine.
Le mieux est d'utiliser une va_list et de récupérer un à un les variables avec va_arg.
Cela est plus portable et plus facile.
Cdlt,
Effectivement, là tu passes par l'adresse et en plus comme tu le dis tu devras gérer le boustisme de la machine.
Le mieux est d'utiliser une va_list et de récupérer un à un les variables avec va_arg.
Cela est plus portable et plus facile.
Cdlt,
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 842
17 nov. 2007 à 22:46
17 nov. 2007 à 22:46
Salut,
Non je ne pense pas qu'en C cela soit possible. Tu abordes le point des templates si je comprends bien ton problème, que tu peux faire en C++.
Cdt
Non je ne pense pas qu'en C cela soit possible. Tu abordes le point des templates si je comprends bien ton problème, que tu peux faire en C++.
Cdt