Почему мои переменные аргументы не работают в C? - PullRequest
2 голосов
/ 11 декабря 2010

Я пытаюсь создать свою собственную функцию printf, но она не работает.Выходные данные выглядят в правильном формате, но параметры передаются неправильно, кажется, и я получаю значения мусора.Я использую GCC.См. Приведенный ниже код.

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 определяется как длина CON_TMPSIZE байтов, что в этой версии составляет 128 байтов.Это для небольшого микроконтроллера, но я ожидаю, что принцип применим к любому процессору.

Я называю это так:

con_printf("LOOP a %d\n", 0, 10);
con_printf("LOOP b %d\n", 0, 12);

Я ожидаю, что LOOP 10 будет напечатан на первоми LOOP b 12 на следующей, но я получаю LOOP a 542 и LOOP b 542.

1 Ответ

4 голосов
/ 11 декабря 2010

С помощью va_start вы указываете, с какого момента начинаются аргументы переменной.

Поскольку список аргументов переменной вашей функции начинается после attr, вам необходимо:

va_start(args, attr);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...