J'essaie de créer ma propre fonction printf, mais ça ne marche pas. La sortie semble être le format correct, mais les paramètres ne sont pas transmis correctement, il semble, et je reçois des valeurs de garbage. J'utilise GCC. Voir le code ci-dessous.Pourquoi mes arguments varidiques ne fonctionnent-ils pas en C?
void con_printf(char *fmt, char attr, ...)
{
char *s = printf_buffer;
va_list args;
va_start(args, fmt);
vsnprintf(s, CON_TMPSIZE, fmt, args);
va_end(args);
while(*s != '\0')
{
con_putchr(*s, attr);
s++;
}
con_flush();
}
printf_buffer est défini comme CON_TMPSIZE octets de long, qui est de 128 octets dans cette version. C'est pour un petit microcontrôleur, mais je m'attends à ce que le principe s'applique à n'importe quel processeur.
Je l'appelle comme ceci:
con_printf("LOOP a %d\n", 0, 10);
con_printf("LOOP b %d\n", 0, 12);
Je me attends LOOP 10 à imprimer sur la première ligne, et LOOP b 12 sur l'autre, mais je reçois LOOP a 542 et LOOP b 542.
nous montrent Veuillez l'appelant, et les arguments étant passé dans – EvilTeach
@EvilTeach - a ajouté le code de l'appelant –