sprintf(缓冲区,“字符串:%f”,float_num)的问题

问题描述 投票:0回答:1

我可能很蠢,但它就是行不通。它引发了一个 HardFault,如果我检查缓冲区,它没有数字,只是“字符串:”。我无法通过反编译来解决它。我正在开发一个 STM32f4 MCU 项目。缓冲区已经足够长来容纳字符串和数字。

从拆解来看:

ffffffe9:   Failed to execute MI command:
          -data-disassemble -s 4294967273 -e 4294967423 -- 3
          Error message from debugger back end:
          Cannot access memory at address 0xffffffe8

这是调用树中的最后一个函数:

          __sfputs_r:
08007feb:   push    {r3, r4, r5, r6, r7, lr}
08007fed:   mov     r6, r0
08007fef:   mov     r7, r1
08007ff1:   mov     r4, r2
08007ff3:   adds    r5, r2, r3
08007ff5:   cmp     r4, r5
08007ff7:   bne.n   0x8007ffc <__sfputs_r+18>
08007ff9:   movs    r0, #0
08007ffb:   b.n     0x800800c <__sfputs_r+34>
08007ffd:   ldrb.w  r1, [r4], #1
08008001:   mov     r2, r7
08008003:   mov     r0, r6
08008005:   bl      0x8007fbc <__sfputc_r>
08008009:   adds    r3, r0, #1
0800800b:   bne.n   0x8007ff4 <__sfputs_r+10>
0800800d:   pop     {r3, r4, r5, r6, r7, pc}
0800800f:   movs    r0, r0

这是电脑所指向的位置(第一个地址):

20017f28:   str     r6, [sp, #228]  ; 0xe4
20017f2a:   ldrge   r2, [r0, r0]
20017f2c:   strlt   r6, [sp, #228]  ; 0xe4
20017f2e:   ldr     r2, [r0, r0]
20017f30:   strb    r1, [r5, r2]
20017f32:   subs    r7, #145        ; 0x91
20017f34:   ldr     r0, [sp, #220]  ; 0xdc
20017f36:   lsrs    r0, r0, #32
20017f38:   strb    r1, [r5, r2]

我尝试使用 snprintf 但没有成功。

c printf
1个回答
0
投票

可能是

%f
需要
double
,而不是
float

© www.soinside.com 2019 - 2024. All rights reserved.