sprintf 遗漏双数据 C

sprintf leaves out double data C

sprintf 函数不包括我已经包含的变量。 我有以下代码:

    typedef struct
{
    double sensor_1;
    double sensor_2;
    double sensor_3;
    double sensor_4;
    int32_t acc_count;
}PAC1934_ResultData_t;

这是功率传感器的结构。

PAC1934_ResultData_t power;
power = PAC1934_read_Power_accumulation();
uint8_t buf[100] = {0};
sprintf((char*)&buf, "  %010.9f W     %010.9f W     %010.9f W     %010.9f W    \n\r",
           power.sensor_1, power.sensor_2, power.sensor_3, power.sensor_4);

但是 buf 的值总是只是一些空格和 W。我检查了调试器和 power 的值。sensor_1, ... 总是正确的并且不为零。 幂值都是双精度类型。 函数 PAC1934_read_Power_accumulation(); returns 类型为 PAC1934_ResultData_t 的元素及其所有元素的值。 出了什么问题?

当我用整数重写代码时,sprintf 工作正常。

编辑:试图输出浮点数或双精度数的简单代码不起作用。只有整数输出有效。我用

测试过
double test = 1.432;
printf("%f",test);

考生问题:

不支持 FP@Tom V

各种 compilers/linkers 不自动包含浮点 (FP) 支持。通过 printf()/scanf() 仅使用 FP 的代码被误以为不需要 FP 支持。研究您的编译器以强制将 FP 支持或一些简单且明显的 FP 代码链接到您的源代码。

缓冲区溢出

sprintf((char*)&buf, " %010.9f W ... 可能会超限。 为意外的 FP 值做好准备 并确保不会超限是一个很好的做法,无论如何。 buf[100]%010.9f 是不够的。

备选方案:

// Limit buffer writing
snprintf((char*)&buf, sizeof buf, "  %010.9f W ...
// or 
// Use `%g` to avoid long text
sprintf((char*)&buf, "  %010.9g W ...   
// or 
// Increase buffer size to some worst case - think -DBL_MAX
uint8_t buf[4 * 350] = {0};

真失败?

OP 仅描述了 失败,但没有post 可以复制它的代码。


一般帮助

启用所有编译器警告。