C 复制字符串后出现ARM7 Raspberry pi程序集分段错误

C 复制字符串后出现ARM7 Raspberry pi程序集分段错误,c,assembly,segmentation-fault,arm7,C,Assembly,Segmentation Fault,Arm7,这是我的ARM7汇编代码片段 .global strCopy .text strCopy: strCopyloop: LDRB R2, [R1], #1 STRB R2, [R0], #1 CMP R2, #0 BNE strCopyloop Bx LR 下面是使用此函数的C文件 #include <stdlib.h> #include <stdio.h> #include <stdint.h> ext

这是我的ARM7汇编代码片段

.global strCopy
.text
strCopy:

strCopyloop:    
    LDRB R2, [R1], #1
    STRB R2, [R0], #1

    CMP R2, #0
    BNE strCopyloop

    Bx LR
下面是使用此函数的C文件

#include <stdlib.h>
#include <stdio.h>
#include <stdint.h>

extern void strCopy(char* strTo, const char* strFrom);
int main(){

        const char* str1 ="This one";
        char* str2;


        strCopy(str2,str1);


        return 0;
}
#包括
#包括
#包括
外部无效strCopy(char*strTo,const char*strFrom);
int main(){
const char*str1=“这个”;
char*str2;
strCopy(str2、str1);
返回0;
}

我一辈子都搞不懂为什么它会给我一个错误

您需要为str2创建空间

这可以使用malloc函数来完成

str2=char*malloc(strlen(str1)+1)


在字符串末尾添加1表示空字符。这显示字符串的结尾。现在,您可以继续使用strcpy函数复制这两个字符串。

您没有为str2分配空间。它将以与常规strcpy相同的方式崩溃。使用调试器查看您正在向asm传递错误的指针(未初始化的
str2
local变量中的任何内容)。使用指针时,为数据创建空间总是很重要的。这对于所有类型的指针都是必需的,而不仅仅是字符串。尤其是在处理复杂结构时。如果我们明确不知道特定数据类型的大小,我们通常使用函数sizeof。如果您不只是测试
strcpy
实现:在使用
strlen
获得长度后,您可以使用
memcpy
,这比
strcpy
更有效。