在C中的可变参数函数下调用sprintf()

Aka*_*kay 0 c variadic-functions

我想为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;
}
Run Code Online (Sandbox Code Playgroud)

但是当我调用它时,我得到的输出如下:

printfDebugSerial("Hello = %u", 1234);
Run Code Online (Sandbox Code Playgroud)

输出:

Hello = 536929228
Run Code Online (Sandbox Code Playgroud)

然后称为:

printfDebugSerial("Hello = %f", 934.3245);
Run Code Online (Sandbox Code Playgroud)

输出:

Hello = 0.000000
Run Code Online (Sandbox Code Playgroud)

任何帮助,这里有什么问题?

lik*_*kle 6

如果你要转发,你应该使用vsprintf而不是sprintf va_list:

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;
}
Run Code Online (Sandbox Code Playgroud)