Accèder au contenu d'une va_list

Résolu
nightlord666 Messages postés 746 Date d'inscription vendredi 17 juin 2005 Statut Membre Dernière intervention 23 mai 2007 - 19 avril 2006 à 16:49
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 - 29 mai 2008 à 17:01
Bonjour ! J'aimerais savoir si il est possible d'accèder à des données se trouvant dans une va_list (accèder à tous les paramètres passés à la fonction), et si c'est possible, comment faut-il faire ?

13 réponses

BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 103
20 avril 2006 à 11:07
c'est ça, oui


void MaFonction(int x,...)
{
va_list vargs;
/* Liste d'arguments optionnels */



/* La liste d'arguments commence après le dernier argument formel */
va_start(vargs,x);


/* Récupération d'un argument de type int */
width=va_arg(vargs,int);

/* Récupération d'un argument de type char */
width=va_arg(vargs,char);

/* Fin de lecture de la liste optionnelle */
va_end(vargs);

}

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Le site de mon mariage
3
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 103
20 avril 2006 à 11:35
En fait, va_arg() récupère le prochain "objet" de la liste, que tu passe en tant que 1er paramètre. Dans le second, tu précise le type de données que tu attends. A la sortie de la fonction, le pointeur sur le prochain élément est mis à jour.

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Le site de mon mariage
3
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 103
19 avril 2006 à 21:22
Regarde le fichier stdarg.h
Où sinon, regarde ma dernière source (http://www.cppfrance.com/codes/IMPLEMENTATION-GESTION-STANDARD-CHAINES-CARACTERES_37015.aspx)
Je l'utilise dans la fonction StrFormat()

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Le site de mon mariage
0
nightlord666 Messages postés 746 Date d'inscription vendredi 17 juin 2005 Statut Membre Dernière intervention 23 mai 2007 10
20 avril 2006 à 08:11
En fait, si j'ai bien compris, il faut faire comme ceci :

void MaFonction(int x, ...)
{
va_list params;
va_start(params);
int y = va_arg(params, 1);
va_end(params);

return x + y;
}

C'est ça ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
nightlord666 Messages postés 746 Date d'inscription vendredi 17 juin 2005 Statut Membre Dernière intervention 23 mai 2007 10
20 avril 2006 à 11:20
Ah d'accord. Je pensais que va_arg était en fait comme ceci :

va_arg(va_list, numero_du_param).

Bon bah je vais essayer comme tu m'as dit.
0
nightlord666 Messages postés 746 Date d'inscription vendredi 17 juin 2005 Statut Membre Dernière intervention 23 mai 2007 10
20 avril 2006 à 11:36
OK ! Merci du renseignement !
0
erickoua Messages postés 6 Date d'inscription dimanche 20 avril 2008 Statut Membre Dernière intervention 20 juin 2008
16 mai 2008 à 16:15
je voudrais écrire un programmequi permet de téléchager, d'enregistrer un fichier et de stoker sur un disk dur
0
erickoua Messages postés 6 Date d'inscription dimanche 20 avril 2008 Statut Membre Dernière intervention 20 juin 2008
16 mai 2008 à 16:17
salut, j'ai un proget de fin d'etude a f   faire et je ne sais pas comment créer les interfaces API en langage C pourriez vous me montrer comment faire?

je voudrais écrire un programmequi permetb de téléchager, d'enregistrer un fichier sur un disk dur
0
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 103
16 mai 2008 à 16:54
Hello,
Tu te trompes d'endroit pour poster ta demande mon ami.
Crée toi un nouveau topic en expliquant bien ton problème: "créer les interface API en C" ne veut pas dire grand-chose...

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Le site de mon mariage
0
RMEU Messages postés 31 Date d'inscription mercredi 10 avril 2013 Statut Membre Dernière intervention 10 novembre 2014
29 mai 2008 à 10:14
Je suis en train d'écrire une fonction (appelons-la MyFunc) qui prend un nombre variable de paramètres.  Jusque là, pas de problème pour les traiter.  Maintenant, dans cette fonction, je dois appeler la fonction fprintf qui prend aussi un nombre variable de paramètres qui on été passés à MyFunc.  Quelqu'un a-t'il une idée sur la manière de procéder?  merci d'avance.
0
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 103
29 mai 2008 à 14:54
Yep, je crois que tu passes directement à fprintf() ta va_list.

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Le site de mon mariage
0
RMEU Messages postés 31 Date d'inscription mercredi 10 avril 2013 Statut Membre Dernière intervention 10 novembre 2014
29 mai 2008 à 15:37
Merci pour votre prompte réponse, mais ...
Voici le code (simplifié) qui ne fonctionne toujours pas

#include <stdio.h>
#include
#include <stdarg.h>

static void trc_trace( const char *as_module, int av_level, const char *as_str, ... )
{
   int   lv_rc = 0;
   char lv_buf[100];
   va_list lv_va_list;

   memset( lv_buf, 0, 100 );
   va_start( lv_va_list, as_str );
   lv_rc = sprintf( lv_buf, as_str, lv_va_list );
   va_end( lv_va_list );

}

int main ( int ap_argc, char *ap_argv[] )
{
   int lv_rc = 1;
   trc_trace( "MAIN", 2, "Message <%d> val <%d>", lv_rc, 123 );
   return 0;
}

Notons que l'utilisation de va_arg dans la fontion trc_trace donne des résultats corrects.  J'ai éliminé l'utilisation de va_arg, mais le résultat est toujours faux.  Il suffit de regarder le contenu de lv_buf après le sprintf.
0
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 103
29 mai 2008 à 17:01
Euh bah...désolé, je ne sais pas quoi dire...j'aurais fait la même chose que toi

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Le site de mon mariage
0
Rejoignez-nous