cedricbrun | Bonjour à tous Voila mon problème :
Je voudrais faire une fonction ayant une liste d'arguments variables, à la manière de printf en quelque sorte
void mafonction (chaine, arg1, arg2, ....)
sauf qu'au contraire de printf, ma fonction doit modifier ces variables, elles doivent donc être passées par adresse.
Mais j'y arrive pas ! Puisqu'un peu de code vaut mieux qu'un long discours :
Un fonction du genre de ce que je veux faire
Elle récupère deux variables, un entier et une chaine, et les remplacent par d'autres.
Code :
- void bidon(char *invite, ...)
- {
- int *ptr_int;
- char *ptr_char;
- char *nouv = "Coucou c'est la nouvelle chaine";
- int nouvage = 34;
- // gestion des arguments d'un nombre variable
- va_list liste; // c'est la liste des arguments
- va_start(liste, invite);
- // on est sensé récupéré d'abord un entier
- ptr_int = va_arg(liste, int *);
- ptr_char = va_arg(liste, char *);
- va_end(liste);
- printf("On a récupéré : %s et %d\n", ptr_char, *ptr_int);
- printf("On va essayer de les transformer" );
- ptr_char = nouv;
- ptr_int = &nouvage;
- printf("On a récupéré : %s et %d\n", ptr_char, *ptr_int);
- }
|
L'appel de ma fonction dans le main
Code :
- int main(int argc, char *argv[])
- {
- char *nom = "hello";
- int age = 12;
- bidon("invite proposée", &age, nom);
- printf("\n La fonction a renvoyée nom=%s et age = %d \n", nom, age);
- return 0;
- }
|
Et le resultat de l'appel, qui ne correspond pas à mes souhaits
Code :
- On a récupéré : hello et 12
- On va essayer de les transformerOn a récupéré : Coucou c'est la nouvelle chaine et 34
- La fonction a renvoyée nom=hello et age = 12
|
Vous voyez le problème ? vous avez des idées?
|