代码之家  ›  专栏  ›  技术社区  ›  Akay

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

  •  0
  • Akay  · 技术社区  · 7 年前

    我想写一篇简短的文章 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 回复  |  直到 7 年前
        1
  •  6
  •   likle    7 年前

    你应该使用 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;
    }