Fonctions avec n arguments [C] - C++ - Programmation
Marsh Posté le 15-04-2002 à 15:59:52
recherche voir autour de va_list, va_start et va_end
Marsh Posté le 15-04-2002 à 16:29:56
Bon, bah ca compile mais ca fait n'imp
ma fonction c'est ca :
void MsgBox(HWND hWnd, char* Texte, char* Titre, ...)
{
char buffer[256];
// recuperation des arguments
va_list arglist;
va_start(arglist, Titre);
// Formatage du message
sprintf(buffer, Texte, arglist);
// Affiche du message
MessageBox(hWnd, buffer, Titre, MB_OK);
}
Seulement, quand je l'appelle avec MsgBox("Test %d %d",1,2) ca m'affiche :
Test 6814944 6815144
ca ressemble pas vraiment à Test 1 2 .....
D'où vient le problème ?
Marsh Posté le 15-04-2002 à 16:34:10
ca ne marche pas exactement comme ca, voici un petit exemple calculant la moyenne de n variables passées en parametre, adapte le a tes besoin:
int moyenne( int first, ... )
{
int count = 0, sum = 0, i = first;
va_list marker;
va_start( marker, first ); /* Initialise les variables argument. */
while( i != -1 )
{
sum += i;
count++;
i = va_arg( marker, int); /*<--- ici il faut passer le type */
}
va_end( marker ); /* Reset les variables argument */
return( sum ? (sum / count) : 0 );
}
Marsh Posté le 15-04-2002 à 16:35:50
utilise vsprintf
ta pas confondu Texte et Titre au ca ou dans le code?
verifie voir
Marsh Posté le 15-04-2002 à 16:40:59
merci bcp deathsharp grace a toi, ca marche !!
avec vsprintf ca marche nickel.
voilà le code juste pour ceux que ca intéresse :
void MsgBox(HWND hWnd, char* Texte, char* Titre, ... )
{
char buffer[256];
// Recuperation des arguments
va_list arglist;
va_start(arglist, Titre);
// Formatage du message
vsprintf(buffer, Texte, arglist);
// Affichage du message
MessageBox(hWnd, buffer, Titre, MB_OK);
}
Marsh Posté le 15-04-2002 à 16:41:43
c koi la différence entre sprintf et vsprintf ?
(oui, j'ai la flemme de chercher )
Marsh Posté le 15-04-2002 à 16:43:55
sprintf dernier arg c "..." et vsprintf c va_list si je me gourre po
Marsh Posté le 15-04-2002 à 16:44:09
ok, vsprintf c'est spécialement pour les va_list/va_start
c'est cool, j'ai appris un truc intéressant aujourd'hui
merci encore
Marsh Posté le 15-04-2002 à 16:45:26
Marsh Posté le 15-04-2002 à 15:57:30
Le problème est simple :
je voudrais faire un fonction comme printf avec n arguements
exemple:
int a = 2;
int b = 3;
ma_fonction("test %d %d", a, b);
donc j'ai défini ma fonction comme ceci :
void ma_fonction(char*, ...)
{
/* etc.. */
}
La question est : comment récupérer les valeurs dans le '...' de la définition de la fonction ?