Passer une liste variable d'arguments en entrée/sortie [C] - C - Programmation
Marsh Posté le 23-12-2003 à 15:37:45
ta fonction doit modifier les variables.
Effectivement printf n'est pas le bon exemple. Regarde du coté de scanf, c'est exactement ce qu'il te faut
Marsh Posté le 23-12-2003 à 15:55:05
Oui enfin bon..je veux pas faire le rabat-joie mais on a fait plus comprehensible que la glibc..
vraiment je comprends pas.
Une explications ? qu'est-ce qui ne va pas dans mon code ? un exemple?
Marsh Posté le 23-12-2003 à 17:46:26
à l'avant dernière ligne de "bidon" essaie plutôt "*ptr_int=nouvage"...
Marsh Posté le 23-12-2003 à 22:54:37
Tout n'etait pas passe par adresse comme il faur, et les assignations dans la fonction appellée n'etaient pas au bon niveau. Ceci fonbctionne:
Code :
|
A+,
Marsh Posté le 27-12-2003 à 21:47:07
Bonnes fetes a toi aussi.
Le seul truc a voir, c'etait le niveau d'indirection.
J'ai ecrit
int *ptr_int;
char **ptr_char;
Mais
int *ptr_int;
char* *ptr_char;
aurait ete plus explicite.
A+,
Marsh Posté le 29-04-2004 à 14:51:24
Je sais que ce topic est un peu vieux mais j'aimerai qu'il remonte pour répondre a une de mes questions
voila, je cherchais justement comment faire pour passer un nb variable d'arguments, ça c'est bon.
mais ne sachant pas cb d'argument je vais passer, je voudrais savoir si il y a un moyen de récupérer ce nombre ?
est-ce que va_arg() revoie qq de spécial quand il n'y a plus d'arguments ?
ma f° doit faire le même traitement avec tous les arguments qu'on lui file, donc je pensait justement a une boucle while.
Si je m'exprime mal dites le moi, j'aimerais bien trouver
Marsh Posté le 29-04-2004 à 23:40:58
Non il n'y a aucun moyen. Tu dois te débrouiller pour informer ta fonction du nombre d'arguments qui lui est passé.
Marsh Posté le 29-04-2004 à 23:52:55
djdie a écrit : Non il n'y a aucun moyen. Tu dois te débrouiller pour informer ta fonction du nombre d'arguments qui lui est passé. |
hum ... bah oki ... c'est pas si compliqué que ça à mettre en place.
mais comment fait printf alors par exemple ?
Marsh Posté le 29-04-2004 à 23:59:48
hum... pas con
bon, bah je passerai le nombre d'arg en arg
merci bcp
Marsh Posté le 30-04-2004 à 08:10:40
The_chosen_one a écrit : hum... pas con |
Bah on peut aussi imaginer que tu parcours tout tes arguments en les mettant de coté avant de les traiter, comme ça tu sais combien il y en a après
Marsh Posté le 30-04-2004 à 17:41:23
bah non justement, tu ne peux pas "parcourir tout tes arguments" puisque tu ne sais pas quand t'arrêter !
Marsh Posté le 01-05-2004 à 01:44:39
ouais je supose que va_arg parcours la pile tout connement
Marsh Posté le 01-05-2004 à 12:56:14
bah je vois pas trop le probleme..
va_start()
va_arg()
va_end()
sont des macros, autrement dit le code est généré juste avant la compilation, donc a priori, si on fais une boucle va_start() ...... va_end() en incrementant un variable dedans on peut savoir combien on en a.. Il faudrait en même temps les mettre dans un tableau qui s'allouerai de manière dynamique pour les stocker car je suis pas sûr qu'on puis ensuite refaire un va_start() sans effet de bords (pour traiter les variables)
Marsh Posté le 01-05-2004 à 17:14:02
cedricbrun > Ce n'est pas une bonne idée je crois.
va_arg
... |
Je viens de configurer man en français (au cas ou).
... |
Marsh Posté le 02-05-2004 à 03:05:24
Voilà, donc on peut pas savoir combien il y en a.
cedricbrun a écrit : [...] je suis pas sûr qu'on puis ensuite refaire un va_start() sans effet de bords (pour traiter les variables) |
Oui on peut, aucun problème. Ce qui est indéfini, c'est par exemple de quitter la fonction sans appeler va_end.
Marsh Posté le 23-12-2003 à 13:01:50
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.
L'appel de ma fonction dans le main
Et le resultat de l'appel, qui ne correspond pas à mes souhaits
Vous voyez le problème ? vous avez des idées?