Hitomi22 发表于 2025-7-19 10:00

对 strcat() 的调用实际上没有调用 strcat()?

本帖最后由 Hitomi22 于 2025-7-28 22:48 编辑

在使用STM32CubeIDE v1.6.1,遇到了一些奇怪的问题。当我调用strcat()函数时,如果目标字符串末尾(即null终止符所在位置)的地址是奇数地址,就会出现硬件错误(hardfault)?以下是.list文件中的代码:                  char s1;                  strcpy(s1, "--"); 8
00ab50:      f107 030c         
add.w      r3, r7, #12
800ab54:      4a65
             ldr      r2,       ;
(800acec <sd_cmdproc_process_packet+0x374>)
800ab56:      6812            
ldr      r2,
800ab58:      4611
             mov      r1, r2
800ab5a:      8019
            strh      r1,
800ab5c:      3302
            adds      r3, #2 800ab5e:      0c12            lsrs      r2, r2, #16 800ab60:      701a            strb      r2,                   strcat(s1, "1"); 800ab62:      f107 030c         add.w      r3, r7, #12 800ab66:      4618            mov      r0, r3 800ab68:      f7f5 fbc4         bl      80002f4 <strlen> 800ab6c:      4603            mov      r3, r0 800ab6e:      461a            mov      r2, r3 800ab70:      f107 030c         add.w      r3, r7, #12 800ab74:      4413            add      r3, r2 800ab76:      495e            ldr      r1,       ; (800acf0 <sd_cmdproc_process_packet+0x378>) 800ab78:      461a            mov      r2, r3 800ab7a:      460b            mov      r3, r1 800ab7c:      881b            ldrh      r3, 800ab7e:      8013            strh      r3,                   strcat(s1, "2"); 800ab80:      f107 030c         add.w      r3, r7, #12 800ab84:      4618            mov      r0, r3 800ab86:      f7f5 fbb5         bl      80002f4 <strlen> 800ab8a:      4603            mov      r3, r0 800ab8c:      461a            mov      r2, r3 800ab8e:      f107 030c         add.w      r3, r7, #12 800ab92:      4413            add      r3, r2 800ab94:      4957            ldr      r1,       ; (800acf4 <sd_cmdproc_process_packet+0x37c>) 800ab96:      461a            mov      r2, r3 800ab98:      460b            mov      r3, r1 800ab9a:      881b            ldrh      r3, 800ab9c:      8013            strh      r3, 800ab9e:      e1c4            b.n      800af2a <sd_cmdproc_process_packet+0x5b2>}
"strcat "1"" 可以工作,但"strcat "2""会导致硬件故障。我怀疑是与"strh"的对齐错误有关。另一个奇怪的现象是:对strcat()(以及strcpy())的调用并没有调用实际的函数。

LOVEEVER 发表于 2025-7-29 23:28

没有遇到过
页: [1]
查看完整版本: 对 strcat() 的调用实际上没有调用 strcat()?