为什么sprintf()会生成问号字符作为输出?

OrE*_*lse 3 c embedded visual-studio-code platformio

在嵌入式项目上工作时,我注意到sprintf()以下代码的方法:

  char ln2[16];
  sprintf(ln2, "%f Volt", Data[Position].Voltage1);
Run Code Online (Sandbox Code Playgroud)

生成问号字符作为输出。

从上面的代码生成的输出是:

? Volt
Run Code Online (Sandbox Code Playgroud)

而输入声明为 double Voltage1 = 0.0;

尝试格式化整数时,似乎不存在相同的问题。
预期的工作如下:

  char ln1[16];
  sprintf(ln1, "POSITION %d", (Position + 1));
Run Code Online (Sandbox Code Playgroud)

并输出POSITION 3其中的Position是全局变量并声明为int

实际保存数据的结构是:

struct data
{
  int Position;
  double Voltage1;
  double Voltage2;
};
Run Code Online (Sandbox Code Playgroud)

以上全部针对VS Code 使用C / C ++Platform.io扩展。

这是怎么了?

P__*_*J__ 5

嵌入式版本的printf通常不实现浮点数处理。您需要让链接器链接正确版本的函数。例如,对于ARM gcc,它将为-u _printf_floator / and-u _scanf_float