Вызов sprintf () для функции с переменным числом в C - PullRequest
0 голосов
/ 19 сентября 2018

Я хочу написать быструю printf() своего рода функцию для встроенной платы, над которой я работаю, где выходной терминал является последовательным портом.Я попробовал что-то вроде этого:

int32_t printfDebugSerial(const char *format, ...)
{
  char tempBuff[256];
  memset(tempBuff, 0, sizeof tempBuff);

  va_list arg;
  int32_t done;
  va_start (arg, format);
  done = (int32_t)sprintf(tempBuff,format, arg);
  va_end (arg);

  HAL_sendToSerial((uint8_t*)tempBuff, strlen(tempBuff)); // writes bytes to serial port
  return done;
}

Но вывод, который я получил, когда я назвал его следующим образом:

printfDebugSerial("Hello = %u", 1234);

вывод:

Hello = 536929228

затем вызвалкак:

printfDebugSerial("Hello = %f", 934.3245);

вывод:

Hello = 0.000000

Любая помощь, что здесь не так?

1 Ответ

0 голосов
/ 19 сентября 2018

Вы должны использовать vsprintf вместо sprintf, если вы пересылаете va_list s:

int32_t printfDebugSerial(const char *format, ...)
{
  char tempBuff[256];
  memset(tempBuff, 0, sizeof tempBuff);

  va_list arg;
  int32_t done;
  va_start (arg, format);
  done = (int32_t)vsprintf(tempBuff,format, arg);
  va_end (arg);

  HAL_sendToSerial((uint8_t*)tempBuff, strlen(tempBuff)); // writes bytes to serial port
  return done;
}
...