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

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

  char ln2[16];
  sprintf(ln2,"%f Volt",Data[Position].Voltage1);

生成问号字符作为输出。

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

? Volt

当输入被声明为double Voltage1 = 0.0;

尝试格式化整数时,似乎没有相同的问题。
预期效果如下:

  char ln1[16];
  sprintf(ln1,"POSITION %d",(Position + 1));

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

实际保存数据的结构是:

struct data
{
  int Position;
  double Voltage1;
  double Voltage2;
};

使用C/C++时的所有操作 和Platform.io扩展都适用于VS Code。

这是怎么回事?

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

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

,

ln2指向字符串文字。字符串文字是只读的,因此当您尝试写入字符串文字时,您将调用undefined behavior

您应该将ln2定义为可写的字符数组。

char ln2[16];
本文链接:https://www.f2er.com/3063040.html

大家都在问